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
結果應該是10,而不是I T給予-78爲什麼減法結果是錯誤的?組件86
謝謝我更換了添加esp,添加了esp 12,然後使用了pop兩個regs。工作正常。非常感謝。 – matheromqq
@matheromqq雖然你的修補程序可能在這種情況下工作,它不會這樣做一般。這裏函數參數(按值傳遞)被複制到堆棧以傳遞給函數。但是,除非調用約定另有說明,否則被調用函數有權修改這些副本。因此,您必須將這些值保存在調用函數控制的位置。例如一個(保存的)寄存器,堆棧,存儲器等。另一方面,如果你假設,就像你看起來正在做的那樣,沒有寄存器被保存,你就會讓自己變得更加困難! –