Почему я не могу напечатать значение в регистре в NASM? - PullRequest
0 голосов
/ 01 ноября 2018

Я пытаюсь напечатать значение в различных регистрах в 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 голосов
/ 01 ноября 2018

Он печатает адрес prmVal2, а не его значение. Но если вы исправите это, он все равно не будет работать, потому что prmVal2 содержит адрес regValue, а не его значение.

Я согласен с рекомендацией @ Ped7g избегать использования макросов до тех пор, пока у вас не появятся навыки для выявления подобных проблем, поскольку они делают такие проблемы еще более неясными.

...