我正在尝试在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
答案 0 :(得分:1)
它正在打印prmVal2的地址而不是其值。但是,如果您修复了该错误,它仍然将不起作用,因为prmVal2包含regValue的地址,而不是其值。
我同意@ Ped7g的建议,在您有能力识别此类问题之前避免使用宏,因为它们会使此类问题变得更加晦涩。