浮点运算:汇编浮点运算指令集



对下面指令先做些介绍说明:
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) www. 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) ( condition codes)


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


2st(0)次方
st(0) <- 2 ^ st(0)

FXTRACT
Extract exponent:
st(0) <-exponent of st(0); and gets pushed
st(0) <-signicand of st(0)



FPREM
取余数
st(0) <-st(0) MOD st(1)

FPREM1
取余数(IEEE)FPREM但是使用IEEE标准[486]





FRNDINT


取整( 4舍 5入)
st(0) <- INT( st(0) ); depends _disibledevent=>

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)Yst(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)Xst(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
空操作等同CPUnop
st(0) <-st(0)

WAIT/FWAIT
同步FPUCPU:停止CPU运行直到FPU完成当前操作码



FXCH
交换指令交换st(0)st(1)
st(0) <-st(1)
st(1) <- st(0)


[Page]
Tags:  cpu浮点运算 浮点运算器 什么是浮点运算 浮点运算

延伸阅读

最新评论

发表评论