我尝试在 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。
谢谢
您需要使用完整的 32 位寄存器:
你要这个:
mov eax, 1
mov ebx, 2
add eax, ebx
push eax
push fmtd
call _printf
输出说明-10485757
你得到:
-10485757
十六进制是FF600003
. The 0003
来自push ax
这推动了16个低位eax
. The FF60
是堆栈上剩余的内容。
Reads 这篇文章 https://stackoverflow.com/questions/15191178/how-do-ax-ah-al-map-onto-eax之间的关系的详细解释ax
and eax
.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)