我尝试在x86汇编中使用printf打印一个整数。对于格式字符串printf(fmtstring, vals)
,我已将%d
存储为fmtd。然后我将1放入ax,将2放入bx,将它们相加,并想使用调用printf打印结果。这是代码。
global _main
extern _printf
section .data
fmtd db "%d"
section .text
_main:
push ebp
mov ebp, esp
_begin:
mov ax, 1
mov bx, 2
add ax, bx
push ax
push fmtd
call _printf
add esp, 8
_end:
mov esp, ebp
pop ebp
ret
但我知道
-10485757
而不是预期的
3
您能帮我解决什么问题吗?
当我刚写
push 3
push fmtd
call _printf
它照常工作并打印3。
谢谢
答案 0 :(得分:1)
您需要使用完整的32位寄存器:
您想要这个:
mov eax, 1
mov ebx, 2
add eax, ebx
push eax
push fmtd
call _printf
您对输出-10485757
的解释是:
-10485757
是FF600003
。 0003
来自push ax
,将eax
的16个低位压入。 FF60
就是堆栈上剩下的任何东西。
阅读this SO article,以详细了解ax
和eax
之间的关系。