Caller und callee save Erklärung
lima-city → Forum → Programmiersprachen → Sonstige Programmiersprachen
anleitung
assembler
aufgerufenen funktion
aufruf
funktion
geschriebene funktion
grad
http
index
inhalt
jemand
liegen
modell
paar
parameter
register
sorgen
update
url
vokabel
-
Kann mir jemand erklären was caller save und callee save beim Assembler genau machen? Ich habe bisher noch nirgendwo eine wirklich für mich verständliche Anleitung gefunden.
Ist mit dem caller save einfach nur gemeint, dass der Basepointer der aufrufenden Funktion auf dem Stack gesichert wird?
Edit: Ich hab grad noch mal nachgedacht. Ist mit callee save gemeint, dass übergebene Parameter im neuem Frame der aufgerufenen Funktion auf dem Stack gespeichert werden?
Beitrag zuletzt geändert: 5.2.2014 11:01:38 von my-easytools -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage
-
Die machen gar nichts. Es geht darum was du, oder besser gesagt: eine von dir geschriebene Funktion, machen muss(t):
* Für ein "callee-saved" Register muss die aufgerufene Funktion[0] ("callee") garantieren, dass es nach der Rückkehr den gleichen Wert hat wie vor dem Aufruf.
* Bei einem "caller-saved" Register muss die Funktion ("caller"), die eine andere aufruft, selbst dafür sorgen, dass es gesichert wird, wenn sie den Inhalt nach dem Aufruf weiter benötigt.
Um welche Register es sich dabei speziell handelt, hängt vom ABI ab, ist also unterschiedlich für jedes Register-Modell und jede Aufrufkonvention.
Ich habe bisher noch nirgendwo eine wirklich für mich verständliche Anleitung gefunden.
Das könnte daran liegen, dass die Vokabeln nicht ganz korrekt benannt sind ("saved" vs. "save").
Oder daran, dass die Register oft auch anders genannt werden: volatil statt caller-saved und nonvolatil statt callee-saved.
Oder daran, dass dieses Verfahren generell schlecht dokumentiert sein soll.
Oder daran, dass heutzutage kaum noch ein Mensch direkt in Assembler|Maschinensprache programmiert.
...
*update*
Ein paar Links gibts aber schon:
http://zhongshugu.wordpress.com/2011/02/23/caller-save-registers-and-callee-save-registers/
http://au.answers.yahoo.com/question/index?qid=20101104075818AA8ixNn
http://stackoverflow.com/questions/14590215/whats-the-difference-between-caller-and-callee-saved-registers
[0] Subroutine, Procedur e.t.c., wie auch immer deine Programmiersprachumgebung das nennt.
Beitrag zuletzt geändert: 5.2.2014 21:27:23 von alopex -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage