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.
Because
MOV r64, imm64
is a valid x86 instruction, butMOV r/m64, imm64
is not (there's no encoding for it).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.In Intel's Software Developer Manuals.