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

时间:2018-11-01 01:29:34

标签: assembly x86 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]

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

1 个答案:

答案 0 :(得分:6)

首先,rdi实际上是rdi而不是[rdi]。后者,即使假设它是有效的(我比gas的人更多,是nasm的人),它将是存储在rdi所指向的内存中的值。

然后,要指定操作数的大小(其中gas使用更简洁的movl/movb/etc操作),请使用 操作数指定大小,例如:

mov qword [regValue], 9393

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

mov [regValue], rdi

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