[英]NASM x86 print integer using extern printf
我嘗試在 x86 程序集中使用 printf 打印一個整數。 對於格式字符串printf(fmtstring, vals)
我已將%d
存儲為 fmtd。 然后我將 1 放入 ax,2 放入 bx,將它們相加並想使用 call 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
。 0003
來自push ax
,它推動eax
的 16 個低位。 FF60
是堆棧中剩余的任何東西。
閱讀這篇 SO 文章,詳細解釋ax
和eax
之間的關系。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.