assembly - 如何将寄存器中的VALUE移至NASM中的存储变量?

标签 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]

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

最佳答案

好吧,首先,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位绝对值。

关于assembly - 如何将寄存器中的VALUE移至NASM中的存储变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53094065/

相关文章:

c++ - GDB 在操作 SSE2 寄存器时报告 EXC_BAD_ACCESS

linux - 如何调试需要用户输入的 NASM 汇编程序?

linux - 64 位 NASM 文件处理问题

assembly - 如何在没有 0x00 或 0xFF 字节的情况下获取 x86_64 中的指令指针?

assembly - 汇编语言的汇编和链接步骤

assembly - 为什么 gdb 在 RIP 相对模式下显示的地址与绝对地址不同?

assembly - 当我在 x86 程序集中 printf 时,ANSI 转义码不起作用?

c - 如何在汇编器中访问数组的一个元素

c++ - 在 C/C++ 中的特定地址边界上对齐内存是否仍能提高 x86 性能?

assembly - x86:使用内存/交换值?