Hat der Rückgabewert immer in eax-register nach einem Methodenaufruf?

Ich geschrieben habe einen Haken-Bibliothek, die untersucht, wie ein PE ausführbaren Dateien, dll-import-Tabelle zu erstellen, eine Bibliothek, ermöglicht ändern von Parametern und Rückgabewerte. Ich habe ein paar Fragen auf, wie die return-Wert übergeben von einer Funktion.

Habe ich gelernt, dass der Rückgabewert einer Funktion gespeichert ist, in den Akkumulator. Ist dies immer der Fall? Wenn nicht, wie weiß der compiler wissen, wo sich für das Ergebnis der Funktion?

Was ist mit der return-Typ Größe? Eine ganze Zahl wird leicht zu passen, aber was ist eine Gesamtstruktur? Hat der Anrufer die reserve Stapel den Raum, so dass die Methode ruft es schreiben konnte das Ergebnis auf stack?

  • Warum nicht kompilieren ein paar Beispiele und finden Sie für sich selbst?
  • Nein, der ARM7-Prozessor nicht im EAX-register. Weder andere Prozessoren.
  • Natürlich, wenn der return-Typ passt nicht in eax es kann nicht dabei sein. Finden Sie in der Dokumentation von was auch immer-Aufrufkonvention, die Sie verwenden.
  • Bottom line: es kommt auf den compiler und den Konventionen, die es verwendet. (Ich Baue einen compiler, der vergeht, double float args in EAX/EDX [manchmal]).
  • nicht, wenn die Methoden, die "void" zurückgeben und pass-Werte durch Referenzen oder Pointer.
Schreibe einen Kommentar