movq and 64 bit numbers

孤者浪人 提交于 2019-12-01 13:04:21

问题


When I write to a register, everything is fine,

movq  $0xffffffffffffffff, %rax

But I get Error: operand size mismatch when I write to a memory location,

movq  $0xffffffffffffffff, -8(%rbp)

Why is that? I see in compiled C code that in asm these numbers are split in two and two movl instructions show up.

Maybe you can tell me where the mowq and other instructions are documented.


回答1:


Why is that?

Because MOV r64, imm64 is a valid x86 instruction, but MOV r/m64, imm64 is not (there's no encoding for it).


I see in compiled C code that in asm these numbers are split in two and two movl instructions show up.

MOV r/m64, imm32 is a valid x86 instruction, which is why you see two of them being used to store a 64-bit immediate to memory.


Maybe you can tell me where the mowq and other instructions are documented

In Intel's Software Developer Manuals.



来源:https://stackoverflow.com/questions/19582654/movq-and-64-bit-numbers

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!