9 Stimmen

Wie wird der Rückgabewert auf Assemblerebene implementiert?

int main(void){

printf("Hello World");

return 0;

}

Wie ist 0 als Rückgabewert in der Assemblerebene übergeben? Gibt es ein spezielles CPU-Register für diese Aufgabe?

UPDATE

Hier sind die 2 Tabellen zur Übergabe/Rückgabe von Daten im pdf, aber es scheint keine genauen Informationen darüber zu geben, wie die Aufrufkonvention einer API bestimmt wird und welches Register zur Speicherung der Rückgabeadresse verwendet wird:

alt text

alt text

17voto

Jerry Coffin Punkte 452852

Das hängt von der Architektur ab. Nur ein paar Beispiele: Auf x86 wird das EAX-Register normalerweise für Rückgabewerte verwendet. Auf x86-64 ist es RAX. Auf SPARC wird es normalerweise in %o0 angezeigt.

5voto

starblue Punkte 53167

Das ist ein Teil der binäre Anwendungsschnittstelle .

Heutzutage werden der Rückgabewert und die Funktionsparameter in der Regel in Registern übergeben, da dies die effizienteste Option ist. Nur wenn das für die verfügbaren Register zu groß wird, wird der Stack verwendet.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X