0
section .data
intArray dw 100,90,80,70,60
twoNums db ' %d %d ',0,10
num dw 10
numIs db ' %d ',10,0
hello : db 'hello',10,0
section .text
global main
extern printf
main :
mov ebx,intArray
mov esi,0
arrayTravel:
movzx eax,word[intArray+esi]
movzx ebx,word[intArray+esi+2]
push ebx
push eax
push twoNums
call printf
add esp,12
sub eax,ebx
push eax
push numIs
call printf
add esp,8
ret
Ergebnis sollte 10 statt sein i t -78Warum ist das Substraktionsergebnis falsch? Montage x86
danke ich ersetzt add esp, 12 mit add esp, 4 dann verwendet pop für beide regs. funktioniert gut. Danke vielmals. – matheromqq
@matheromqq während Ihr Fix kann in diesem Fall funktioniert es wird nicht so allgemein tun. Hier werden die Funktionsparameter (die als Wert übergeben werden) in den Stapel kopiert, um sie an die Funktion zu übergeben. Sofern die Aufrufkonvention nichts anderes sagt, ist die aufgerufene Funktion berechtigt, diese Kopien zu ändern. Sie müssen daher die Werte an einer Stelle beibehalten, die die aufrufende Funktion steuert. z. B. ein (konserviertes) Register, der Stapel, Speicher usw. Andererseits, wenn Sie annehmen, dass, wie Sie zu tun scheinen, keine Register erhalten bleiben, machen Sie das Leben für Sie viel schwieriger! –