title: What does FSTP DWORD PTR DS:[ESI+1224] do?
body: <p>I am trying to learn more about assembly and disassembly.
  My goal is to modify the way a specific address is being written using a debugger (olly). Preferably by incrementing it by a number (20, 50, etc..) I can identify the address of the floating point number (in this case located at <code>33B7420C</code>).</p>
  
  <p>When I set a breakpoint on memory access write it brings me to <code>00809B2E</code> which has the following assembly:</p>
  
  <p><code>FSTP DWORD PTR DS:[ESI+1224]</code></p>
  
  <p>What exactly is it doing in this address? I know that the FPU register has the number i'm looking for but not sure what all this address is doing.</p>
  
  <p>The closest I come to googling is:
  <a href="https://stackoverflow.com/questions/3224524/what-does-mov-eax-dword-ptr-dsesi-mean-and-what-does-it-do">What does MOV EAX, DWORD PTR DS:[ESI] mean and what does it do?</a></p>
  
  <p>A copy of the registers shows the following:</p>
  
  <pre><code>EAX 00000000
  ECX 00A16E40 EZ.00A16E40
  EDX FFFFFFFF
  EBX 33B74578
  ESP 0018FA90
  EBP 00000000
  ESI 33B72FE8
  EDI 33B74578
  EIP 00809B2E &lt;EZ.Breakpoint for time&gt;
  C 0  ES 002B 32bit 0(FFFFFFFF)
  P 0  CS 0023 32bit 0(FFFFFFFF)
  A 0  SS 002B 32bit 0(FFFFFFFF)
  Z 0  DS 002B 32bit 0(FFFFFFFF)
  S 0  FS 0053 32bit 7EFDD000(FFF)
  T 0  GS 002B 32bit 0(FFFFFFFF)
  D 0
  O 0  LastErr ERROR_SUCCESS (00000000)
  EFL 00210202 (NO,NB,NE,A,NS,PO,GE,G)
  ST0 valid 1150.0000000000000000
  ST1 zero  0.0
  ST2 zero  0.0
  ST3 empty 64.951911926269531250
  ST4 empty -13.250000000000000000
  ST5 empty 64.951911926269531250
  ST6 empty 64.951911926269531250
  ST7 empty 0.0239995196461677551
             3 2 1 0      E S P U O Z D I
  FST 2927  Cond 0 0 0 1  Err 0 0 1 0 0 1 1 1  (LT)
  FCW 027F  Prec NEAR,53  Mask    1 1 1 1 1 1
  </code></pre>
  
  <p>Any help would be appreciated, Thanks!</p>