movq和64位数字

时间:2013-10-25 06:32:21

标签: assembly x86 x86-64 att instruction-set

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

movq  $0xffffffffffffffff, %rax

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

movq  $0xffffffffffffffff, -8(%rbp)

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

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

1 个答案:

答案 0 :(得分:3)

  

为什么?

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


  

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

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


  

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

Intel's Software Developer Manuals