Assembly nasm使用printf显示dword

Assembly nasm使用printf显示dword,assembly,x86,nasm,Assembly,X86,Nasm,这是我的代码(test.asm) 应为“num=1337” 输出:“num=4199373” 问题:我如何修复它 目的:对汇编语言的好奇心,而不是作业 ; nasm -fwin32 test.asm ; gcc test.obj -o test extern _printf global _main section .text _main: push num push msg call _printf add esp, 8 ret

这是我的代码(test.asm)

应为“num=1337”

输出:“num=4199373”

问题:我如何修复它

目的:对汇编语言的好奇心,而不是作业

; nasm -fwin32 test.asm
; gcc test.obj -o test
    extern _printf
    global _main

    section .text
_main:
    push num
    push msg
    call _printf
    add esp, 8
    ret

msg db 'num = %i', 0xa, 0
num dd 1337

push num
更改为
push dword[num]
修复了它。

push num
推送
num
的地址(类似于
push msg
),但不推送其中包含的值


您需要
push dword[num]

NASM的COFF不是微软的PE-COFF。NASM的COFF与DJGPP gcc支持的COFF相同。