簡體   English   中英

NASM x86 使用 extern printf 打印整數

[英]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 文章,詳細解釋axeax之間的關系。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM