为什么减法结果是错误的?装配x86

时间:2016-04-03 21:00:49

标签: assembly x86 nasm

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

1 个答案:

答案 0 :(得分:1)

当你致电printf时,它会返回EAX中打印的字符数,在这种情况下为12.从中减去90,你得到-78。

您不能假设您调用的函数不会更改寄存器中的值,尤其是EAX,您必须保留它们。调用约定将定义哪些寄存器被保留,哪些不被保留。