In my venture of coding a disassembler for the 32-bit Linux on x86 platform, I came across an issue. I saw the following opcode sequence when I disassembled a simple ELF-32 executable using objdump
:
dc 82 04 08 0d 00 faddl 0xd0804(%edx)
But when I look at the Intel manual, I don't see an opcode corresponding to this. The fadd
instruction starts with 0xDC, but then it requires a m64fp
operand, which is "A memory quadword operand in memory."
Now, does this mean that the operand is a 64-bit address (which then means that the fadd
instruction is a 64-bit instruction, but isn't prefixed by a REX byte), or is it just a 32-bit address which points to a quadword (64-bit)?
Am I missing something trivial over here, or is my understanding of encoding x86 instructions wrong?