我正在尝试将寄存器中包含的关联的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]
我收到错误消息: 错误:未指定操作大小
答案 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位绝对值。