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