为什么我不能在NASM中打印寄存器中的值?

时间:2018-11-01 13:52:58

标签: assembly nasm

我正在尝试在NASM的各个寄存器中打印该值,但是在调用执行printf调用的宏之前,先将该寄存器的值传递给内存变量。它没有在寄存器中打印实际值,但是我无法确定原因。

extern printf

%macro OUTPUTREGISTERS 2

        section .data
        prmVal1 dq %1, 10, 0
        prmVal2 dq %2, 10, 0
        section .text
        mov rax, 2
        mov rdi, reg
        mov rsi, prmVal1
        mov rdx, prmVal2
        call printf

%endmacro



section .data
        reg db "%s %d" ,10, 0
        regValue dq 0
        regValue2 dq 0

section .text
        global main



main:
        push rbp
        mov rbp, rsp
        mov rax, 844
        mov rdi, 9393
        mov [regValue], rdi
        OUTPUTREGISTERS 'RDI', regValue
        mov rsp,rbp
        pop rbp
        mov rax, 60
        xor rdi, rdi
        syscall

我希望它可以打印RDI 9393,但可以打印:RDI 6293699

1 个答案:

答案 0 :(得分:1)

它正在打印prmVal2的地址而不是其值。但是,如果您修复了该错误,它仍然将不起作用,因为prmVal2包含regValue的地址,而不是其值。

我同意@ Ped7g的建议,在您有能力识别此类问题之前避免使用宏,因为它们会使此类问题变得更加晦涩。