posts - 225, comments - 62, trackbacks - 0, articles - 0
   :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理

[转]x86 浮点指令

Posted on 2010-04-21 23:25 魔のkyo 阅读(765) 评论(0)  编辑 收藏 引用

转自:http://vinfy.spaces.live.com/Blog/cns!C572C836B7E209AB!108.entry

对下面的指令先做一些说明:
st(i):代表浮点寄存器,所说的出栈、入栈操作都是对st(i)的影响
src,dst,dest,op等都是指指令的操作数,src表示源操作数,dst/dest表示目的操作数
mem8,mem16,mem32,mem64,mem80等表示是内存操作数,后面的数值表示该操作数的内存位数(8位为一字节)
x <- y 表示将y的值放入x,例st(0) <- st(0) - st(1)表示将st(0)-st(1)的值放入浮点寄存器st(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)

 


只有注册用户登录后才能发表评论。