download software developer manual volume 2 for intel
volume 2 is instruction set reference
or as a second choice use online references
search fistp or any other instruction and read for better understanding
basically FISTP takes what is in st[0] converts it to a signed integer and stores it in destination and pops the st[0] (empties st[0])
suppose st[0] contains a valid float like 486.87 (using 32 bit ollydbg here)
and your instruction pointer contains fistp qword ptr [esp+10]
on executing this instruction
esp+10 will hold 487 (486.87 rounded to 487 and positive signed)
prior to execution
post execution
an the stack has been popped
hope you will be able to follow this for FILD
fist
stores a 16-32-64-bit floating point number (IEEE) to the operand address, whereasfild
loads from an address into the stack. Thep
suffix, is the variation offist
that pops the first value,ST(0)
, from said stack. The values you're seeing are not the underlying operand changing the address, but rather that beforefistp
is run, the value is 0x1cf8. After executingfistp
, however,ST(0)
is popped and written to[esp+0x10]
as 0x2c36. When execution gets tofild
, the previous value ofST(0)
was already written.[esp+0x10]
in between the two instructions you listed. (Related question: reverseengineering.stackexchange.com/questions/20559/…, link for answer is archived at web.archive.org/web/20071006182549/http://www.ray.masmcode.com/…)