当我写入寄存器时,一切都很好,
movq $0xffffffffffffffff, %rax
但是当我写入内存位置时出现错误:操作数大小不匹配,
movq $0xffffffffffffffff, -8(%rbp)
这是为什么?我在编译的 C 代码中看到,在 asm 中,这些数字被分成两个,并且出现了两个 movl 指令。
也许您可以告诉我 mowq 和其他说明在哪里记录。
当我写入寄存器时,一切都很好,
movq $0xffffffffffffffff, %rax
但是当我写入内存位置时出现错误:操作数大小不匹配,
movq $0xffffffffffffffff, -8(%rbp)
这是为什么?我在编译的 C 代码中看到,在 asm 中,这些数字被分成两个,并且出现了两个 movl 指令。
也许您可以告诉我 mowq 和其他说明在哪里记录。
这是为什么?
因为MOV r64, imm64
是有效的 x86 指令,但MOV r/m64, imm64
不是(没有编码)。
我在编译的 C 代码中看到,在 asm 中,这些数字被分成两个,并且出现了两个 movl 指令。
MOV r/m64, imm32
是一条有效的 x86 指令,这就是为什么您会看到其中两条指令用于将 64 位立即数存储到内存中。
也许你可以告诉我 mowq 和其他说明在哪里记录
在英特尔的软件开发人员手册中。