错误:`movq'的操作数大小不匹配

Ken*_*ihe 4 assembly x86-64

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

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)

har*_*old 7

如果你查看引理下的手册MOV(不可否认,这有点令人生畏),你会发现没有mov r/m64, imm64.

有一种方法可以将一个完整的64位常数加载到寄存器中,并且有一种方法可以将符号扩展的32位常量加载到64位存储器位置,但是没有一条指令可以立即采用64位并将其写入存储器.

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