Arm Assembly - Aufrufende Funktion mit mehr als 4 Argumenten

8

Ich weiß, dass beim Aufruf einer Funktion in Assembly r0 das erste Argument bis r3 als viertes enthält. Ich weiß, dass der Stapelzeiger verwendet wird, wenn er über vier hinausgeht, aber ich bin mir bei den Einzelheiten nicht sicher. Behält r0-r3 noch die ersten vier und der Rest geht auf den Stapel? Ich schaue auf das folgende Stück Assembly, das versucht zu verstehen, was es macht, mach_msg (eine Funktion mit sieben Argumenten) aufzurufen. Beim Eintritt in diesen Code enthalten r0 und r1 die zwei Argumente

%Vor%

Hier sind die Definitionen für das Zeug, das aufgerufen und benutzt wird:

%Vor%

Soweit ich weiß, wird der Stapelzeiger für Variablen um 48 Byte umgekehrt. Sind das 48 Bytes für die zusätzlichen 3 Argumente oder für alle?

    
user1000039 06.11.2011, 16:50
quelle

3 Antworten

6

Von den 48 Bytes sind 12 für die zusätzlichen 3 Parameter und die anderen sind für lokale Variablen. Sie können dies in dem Code sehen, in dem die Funktion vier Parameter in r0 bis r3 übergibt, einen anderen in [SP, # 0x38 + var_38] (was, wenn Sie die Mathematik berechnen, nur zu [sp]), ein anderer in [sp, # 4 ] und der letzte in [sp, # 8].

    
Raymond Chen 06.11.2011, 17:19
quelle
1
%Vor%

Die ersten vier sind r0 = a, r1 = b, r2 = c, r3 - d, und der Rest wird in umgekehrter Reihenfolge gedrückt, so dass sp + 0 e ist und sp + 4 f.

Wenn Sie eine 64-Bit-Ganzzahl sagen, dann braucht das zwei Register, also könnten Sie r0-r3 mit vier Ints oder zwei Ints und langen langen oder zwei langen Longs usw. verwenden.

    
old_timer 06.11.2011 20:54
quelle
0

ich erinnere mich, so viele wie durch register (r0-r3 oder 4 worte) können über register weitergegeben werden. und der Rest wird durch den Stapel geführt.

    
alvin 06.11.2011 17:35
quelle

Tags und Links