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

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/

10-11 21:11