I've been working for my final project which is a disassembler for AMD64 instruction set, and i was trying to disassemble machine code by hand to understand it correctly. But i got stuck at a x87 instruction.
Machine code of instruction is:
dd 04 c5 60 40 08 08...
I've checked AMD64 manual vol3, and it says DD is an x87 instruction and with the help of ModRM byte ,which is
0b00000100, my ModRM.reg field is
000 and with this information manual says this instructions meaning is "FLD mem64real". But since I've compiled this code for i386 target architecture i think that i shouldn't have 64 bit memory adress.
But the most interesting part is when i checked the binary with objdump, it says that this bytes are corresponds to
fldl 0x8084060(,%eax,8) but i can't find any information about FLDL instruction nor how does objdump find this.
So my question is am i doing something wrong ?
How objdump think that instruction is FLDL but manual says its FLD ?
Target machine of binary is i386.
I use AMD64 manual volume 3 to check instructions
Version of objdump is
GNU objdump (GNU Binutils for Debian) 2.26.1
Here is readelf output of binary
ELF Header Magic: 7f 45 4c 46 01 01 01 00 00 00 00 00 00 00 00 00 Class: ELF32 Data: 2's complement, little endian Version: 1 (current) OS/ABI: UNIX - System V ABI Version: 0 Type: EXEC (Executable file) Machine: Intel 80386 Version: 0x1 Entry point address: 0x80482c0 Start of program headers: 52 (bytes into file) Start of section headers: 3744 (bytes into file) Flags: 0x0 Size of this header: 52 (bytes) Size of program headers: 32 (bytes) Number of program headers: 8 Size of section headers: 40 (bytes) Number of section headers: 31 Section header string table index: 28