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而不是给予-78
答案 0 :(得分:1)
当你致电printf
时,它会返回EAX
中打印的字符数,在这种情况下为12.从中减去90,你得到-78。
您不能假设您调用的函数不会更改寄存器中的值,尤其是EAX
,您必须保留它们。调用约定将定义哪些寄存器被保留,哪些不被保留。