1.  数据传递和对常量的操作指令

 指令格式
  指令含义
  执行的操作
  
 FLD src
  装入实数到st(0)
  st(0) <- src (mem32/mem64/mem80) 
  
 FILD src
  装入整数到st(0) 
  st(0) <- src (mem16/mem32/mem64)
  
 FBLD src  
  装入BCD数到st(0)
  st(0) <- src (mem80)
  
   
  
 FLDZ
  将0.0装入st(0)
  st(0) <- 0.0 
  
 FLD1
  将1.0装入st(0)
  st(0) <- 1.0 
  
 FLDPI
  将pi装入st(0)
  st(0) <- ?(ie, pi)
  
 FLDL2T
  将log2(10)装入st(0)
  st(0) <- log2(10)
  
 FLDL2E
  将log2(e)装入st(0)
  st(0) <- log2(e)
  
 FLDLG2
  将log10(2)装入st(0)
  st(0) <- log10(2)
  
 FLDLN2
  将loge(2)装入st(0)
  st(0) <- loge(2)
  
   
  
 FST dest
  保存实数st(0)到dest
  dest <- st(0) (mem32/mem64)
  
 FSTP dest
    
  dest <- st(0) (mem32/mem64/mem80);然后再执行一次出栈操作
  
 FIST dest
  将st(0)以整数保存到dest
  dest <- st(0) (mem32/mem64) 
  
 FISTP dest
    
  dest <- st(0) (mem16/mem32/mem64);然后再执行一次出栈操作
  
 FBST dest
  将st(0)以BCD保存到dest
  dest <- st(0) (mem80) 
  
 FBSTP dest  
    
  dest<- st(0) (mem80);然后再执行一次出栈操作
  

 2.比较指令 

 指令格式
  指令含义
  执行的操作
  
 FCOM
  实数比较
  将标志位设置为 st(0) - st(1) 的结果标志位
  FCOM op
  实数比较
  将标志位设置为 st(0) - op (mem32/mem64)的结果标志位 
  
   
  
 FICOM op
  和整数比较
  将Flags值设置为st(0)-op 的结果op (mem16/mem32)
  
 FICOMP op
  和整数比较
  将st(0)和op比较 op(mem16/mem32)后;再执行一次出栈操作
  
   
  
 FTST  
  零检测  
  将st(0)和0.0比较
  
 FUCOM st(i)  
    
  比较st(0) 和st(i)                  [486]
  
 FUCOMP st(i)       
    
  比较st(0) 和st(i),并且执行一次出栈操作
  
 FUCOMPP st(i)     
    
  比较st(0) 和st(i),并且执行两次出栈操作
  
 FXAM   
    
  Examine: Eyeball st(0) (set condition codes)

 fnstsw EAX
  将比较后的状态字写入到EAX

 3.运算指令 

 指令格式
  指令含义
  执行的操作
  
 加法
  
 FADD
  加实数
  st(0) <-st(0) + st(1)
  
 FADD src
    
  st(0) <-st(0) + src (mem32/mem64)
  
 FADD st(i),st
    
  st(i) <- st(i) + st(0)
  
 FADDP st(i),st  
    
  st(i) <- st(i) + st(0);然后执行一次出栈操作
  
 FIADD src   
  加上一个整数
  st(0) <-st(0) + src (mem16/mem32)
  
 减法 
  
 FSUB
  减去一个实数
  st(0) <- st(0) - st(1)
  
 FSUB src
    
  st(0) <-st(0) - src (reg/mem)
  
 FSUB st(i),st
    
  st(i) <-st(i) - st(0)
  
 FSUBP st(i),st
    
  st(i) <-st(i) - st(0),然后执行一次出栈操作
  
 FSUBR st(i),st
  用一个实数来减
  st(0) <- st(i) - st(0)
  
 FSUBRP st(i),st
    
  st(0) <- st(i) - st(0),然后执行一次出栈操作
  
 FISUB src
  减去一个整数
  st(0) <- st(0) - src (mem16/mem32)
  
 FISUBR src
  用一个整数来减
  st(0) <- src - st(0) (mem16/mem32)
  
 乘法 
  
 FMUL
  乘上一个实数
  st(0) <- st(0) * st(1)
  
 FMUL st(i)
    
  st(0) <- st(0) * st(i)
  
 FMUL st(i),st
    
  st(i) <- st(0) * st(i)
  
 FMULP st(i),st
    
  st(i) <- st(0) * st(i),然后执行一次出栈操作
  
 FIMUL src
  乘上一个整数
  st(0) <- st(0) * src (mem16/mem32)
  
 除法 
  
 FDIV  
  除以一个实数
  st(0) <-st(0) /st(1)
  
 FDIV st(i)
    
  st(0) <- st(0) /t(i)
  
 FDIV st(i),st
    
  st(i) <-st(0) /st(i)
  
 FDIVP st(i),st
    
  st(i) <-st(0) /st(i),然后执行一次出栈操作 
  
 FIDIV src  
  除以一个整数
  st(0) <- st(0) /src (mem16/mem32)
  
 FDIVR st(i),st
  用实数除
  st(0) <- st(i) /st(0)
  
 FDIVRP st(i),st
    
  FDIVRP st(i),st
  
 FIDIVR src  
  用整数除
  st(0) <- src /st(0) (mem16/mem32)
  
   
  
 FSQRT
  平方根
  st(0) <- sqrt st(0)
  
   
  
 FSCALE
  2的st(0)次方
  st(0) <- 2 ^ st(0)
  
 FXTRACT
  Extract exponent:
  st(0) <-exponent of st(0); and gets pushed 

 st(0) <-significand of st(0) 
  
   
  
 FPREM  
  取余数
  st(0) <-st(0) MOD st(1)
  
 FPREM1
  取余数(IEEE),同FPREM,但是使用IEEE标准[486]
  
   
    
    
  
 FRNDINT  
  取整(四舍五入)
  st(0) <- INT( st(0) ); depends on RC flag
  
   
  
 FABS
  求绝对值
  st(0) <- ABS( st(0) ); removes sign
  
 FCHS
  改变符号位(求负数)
  st(0) <-st(0)
  
   
  
 F2XM1
  计算(2 ^ x)-1
   st(0) <- (2 ^ st(0)) - 1
  
 FYL2X   
  计算Y * log2(X)
  st(0)为Y;st(1)为X;将st(0)和st(1)变为st(0) * log2( st(1) )的值
  
   
  
 FCOS
  余弦函数Cos
  st(0) <- COS( st(0) )
  
 FPTAN
  正切函数tan
  st(0) <- TAN( st(0) )
  
 FPATAN
  反正切函数arctan
  st(0) <- ATAN( st(0) )
  
 FSIN
  正弦函数sin
  st(0) <- SIN( st(0) )
  
 FSINCOS
  sincos函数
  st(0) <-SIN( st(0) ),并且压入st(1)

 st(0) <- COS( st(0) )
  
   
    
    
  
 FYL2XP1  
  计算Y * log2(X+1)
  st(0)为Y; st(1)为X; 将st(0)和st(1)变为st(0) * log2( st(1)+1 )的值 
  
 处理器控制指令
  
 FINIT
  初始化FPU
    
  
 FSTSW AX
  保存状态字的值到AX
  AX<- MSW
  
 FSTSW dest
  保存状态字的值到dest
  dest<-MSW (mem16)
  
   
    
    
  
 FLDCW src
  从src装入FPU的控制字
  FPU CW <-src (mem16)
  
 FSTCW dest
  将FPU的控制字保存到dest
  dest<- FPU CW

 FCLEX  
  清除异常
     
 FSTENV dest
  保存环境到内存地址dest处 保存状态字、控制字、标志字和异常指针的值
  
 FLDENV src
  从内存地址src处装入保存的环境
    
  
 FSAVE dest
  保存FPU的状态到dest处 94字节
    
  
 FRSTOR src
  从src处装入由FSAVE保存的FPU状态
    
  
   
    
    
  
 FINCSTP
  增加FPU的栈指针值
  st(6) <-st(5); st(5) <-st(4),...,st(0) <-?
  
 FDECSTP
  减少FPU的栈指针值
  st(0) <-st(1); st(1) <-st(2),...,st(7) <-? 

 FFREE st(i)
  标志寄存器st(i)未被使用

 FNOP  
  空操作,等同CPU的nop
  st(0) <-st(0)
  
 WAIT/FWAIT
  同步FPU与CPU:停止CPU的运行,直到FPU完成当前操作码
  
   
  
 FXCH
  交换指令,交换st(0)和st(1)的值
  st(0) <-st(1) 

 st(1) <- st(0)