0

当我写入寄存器时,一切都很好,

movq  $0xffffffffffffffff, %rax

但是当我写入内存位置时出现错误:操作数大小不匹配,

movq  $0xffffffffffffffff, -8(%rbp)

这是为什么?我在编译的 C 代码中看到,在 asm 中,这些数字被分成两个,并且出现了两个 movl 指令。

也许您可以告诉我 mowq 和其他说明在哪里记录。

4

1 回答 1

3

这是为什么?

因为MOV r64, imm64是有效的 x86 指令,但MOV r/m64, imm64不是(没有编码)。


我在编译的 C 代码中看到,在 asm 中,这些数字被分成两个,并且出现了两个 movl 指令。

MOV r/m64, imm32是一条有效的 x86 指令,这就是为什么您会看到其中两条指令用于将 64 位立即数存储到内存中。


也许你可以告诉我 mowq 和其他说明在哪里记录

英特尔的软件开发人员手册中。

于 2013-10-25T07:27:52.200 回答