NASM x86使用extern printf打印整数

时间:2019-02-12 12:18:46

标签: c x86 nasm

我尝试在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。

谢谢

1 个答案:

答案 0 :(得分:1)

您需要使用完整的32位寄存器:

您想要这个:

mov eax, 1
mov ebx, 2
add eax, ebx
push eax
push fmtd
call _printf

您对输出-10485757的解释是:

十六进制的

-10485757FF6000030003来自push ax,将eax的16个低位压入。 FF60就是堆栈上剩下的任何东西。

阅读this SO article,以详细了解axeax之间的关系。