蜗牛的家
男儿当自强
posts - 48,  comments - 21,  trackbacks - 0
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)
posted on 2009-03-11 11:40 黑色天使 阅读(1061) 评论(0)  编辑 收藏 引用

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理



<2009年3月>
22232425262728
1234567
891011121314
15161718192021
22232425262728
2930311234

常用链接

留言簿(2)

随笔分类

随笔档案

文章档案

搜索

  •  

最新评论

阅读排行榜

评论排行榜