如何将寄存器中的VALUE移至NASM中的内存变量?

qsc*_*t86 2 x86 assembly nasm

我正在尝试将寄存器中包含的关联的VALUE(不是内存地址)移动到内存变量,但是它不起作用。

section .data
        regValue dq 0


section .text
        global main

main:
        push rbp
        mov rbp, rsp
        mov rax, 844
        mov rdi, 9393
        mov [regValue], [rdi]
Run Code Online (Sandbox Code Playgroud)

我收到错误:错误:未指定操作大小

pax*_*blo 6

那么,对于一个开始,价值rdi其实rdi不是[rdi]。后者,即使假设它是有效的(我是一个gas男人而不是一个nasm男人),也将是rdi指向内存的值。

而且,指定(其中操作数的大小gas使用了更简洁的movl/movb/etc操作),您指定的大小操作数,如:

mov qword [regValue], 9393
Run Code Online (Sandbox Code Playgroud)

但是,当您使用64位寄存器作为源时,我认为这不是必需的rdi因为可以从中推断出大小。我认为您可以做到:

mov [regValue], rdi
Run Code Online (Sandbox Code Playgroud)

顺便说一句,在NASM中,您应该default rel在文件顶部使用静态数据(例如[regValue])的RIP相对寻址模式,而不是32位绝对值。

  • 谢谢@Michael,由于我更喜欢​​AT&T表示法,所以我不确定,但是我会参考您的知识并相应地调整答案。 (2认同)