assembly - 错误 : operand size mismatch for `movq'

标签 assembly x86-64

我正在尝试编译以下程序集...

movq $0x3534373536383235, 0x000000000055638f8
movq $0x55638f8, %rdi
retq

第一个 行抛出错误 Error: operand size mismatch for 'movq'
这对我来说没有意义,因为它们都是 8 字节的数字。

我做了一些研究,推荐使用 movabsq,就像这样......
movabsq $0x3534373536383235, 0x000000000055638f8
movq $0x55638f8, %rdi
retq

但这会引发错误:Error: operand size mismatch for 'movabs'
我错过了什么?

这是我的 mac 上的全部错误
level3.s:1:27: error: invalid operand for instruction
movq $0x3534373536383235, 0x000000000055638f8
                          ^~~~~~~~~~~~~~~~~~~

最佳答案

如果您查看引理 MOV 下的手册(诚然,这有点令人生畏),您会发现没有 mov r/m64, imm64

有一种方法可以将完整的 64 位常量加载到寄存器中,也有一种方法可以将符号扩展的 32 位常量加载到 64 位内存位置,但是没有一条指令可以将 64 位立即数写入内存。

因此,您必须分两步完成,例如使用临时寄存器或将两个双字分别直接写入内存。

关于assembly - 错误 : operand size mismatch for `movq' ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40032148/

相关文章:

c - 段错误 - 调试程序集 gdb

linux - Hello World 程序 Nasm 汇编和 C 的执行指令数不同

assembly - 所有实现AMD64指令集的CPU都具有相同的指令和寄存器吗?

c++ - 为什么局部静态对象的初始化使用隐藏的保护标志?

C++ 内联汇编 : how to deal with references?

c - %c 在 GCC 内联汇编代码中是什么意思?

regex - 正则表达式和汇编

ios - 提交到 App Store 问题 : Unsupported Architecture x86

linux - x86_64 Linux syscall参数

macos - 汇编语言中的数组访问