asm FPU 寄存器

    TOP--                                    TOP++
顶部 ST(0) ST(1) ST(2) ST(3) ST(4) ST(5) ST(6) ST(7) 底部

指令后的注释通常是执行后的结果

push

section .data
  f dd 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0

section .text
main:
  fld dword [f+4*0] ; st(0)1.0 
  fld dword [f+4*1] ; st(0)2.0 st(1)1.0 
  fld1              ; st(0)1.0 st(1)2.0 st(2)1.0 

pop

main:
  fld dword [f+4*0]
  fld dword [f+4*1]
  fld1
  
  ; mov [eax],st(0)
  ; 指令后面带p的通常是pop的意思,fst与fstp一样取值,但是没有改变FUP寄存器
  fstp dword [eax]   ; st(0)2.0 st(1)1.0
  ;fst dword [eax] ; st(0)1.0 st(1)2.0 st(2)1.0

  fld dword [f+4*2]  ; st(0)3.0 st(1)2.0 st(2)1.0 

常见的减减操作

main:
  fld dword [f+8] ; st(0)3.0
  fld1            ; st(0)1.0 st(1)3.0

  ; fsubp st(1), st(0)
  ; st(1) = st(1) - st(0)
  ; pop
  fsubp           ; st(0)2.0

See also:

原文地址:https://www.cnblogs.com/ajanuw/p/14271992.html