movq and 64 bit numbers

2020-04-01 03:01发布

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条回答
放我归山
2楼-- · 2020-04-01 03:54

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.

查看更多
登录 后发表回答