我正在尝试编译以下程序集......
movq $0x3534373536383235, 0x000000000055638f8
movq $0x55638f8, %rdi
retq
Run Code Online (Sandbox Code Playgroud)
在第一线引发错误Error: operand size mismatch for 'movq'
这对我来说没有意义,因为它们都是8字节数字.
我做了一点研究movabsq并被推荐,就像这样......
movabsq $0x3534373536383235, 0x000000000055638f8
movq $0x55638f8, %rdi
retq
Run Code Online (Sandbox Code Playgroud)
但这会引发错误: Error: operand size mismatch for 'movabs'
我错过了什么?
这是我的mac的整个错误
level3.s:1:27: error: invalid operand for instruction
movq $0x3534373536383235, 0x000000000055638f8
^~~~~~~~~~~~~~~~~~~
Run Code Online (Sandbox Code Playgroud)
如果你查看引理下的手册MOV(不可否认,这有点令人生畏),你会发现没有mov r/m64, imm64.
有一种方法可以将一个完整的64位常数加载到寄存器中,并且有一种方法可以将符号扩展的32位常量加载到64位存储器位置,但是没有一条指令可以立即采用64位并将其写入存储器.
因此,您必须分两步完成,例如使用临时寄存器或将两个dword直接写入内存.