When I write to a register, everything is fine,
movq $0xffffffffffffffff, %rax
But I get Error: operand size mismatch when I write to a me
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.