我正在尝试编译以下程序集...
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/