浮点指令
合集下载
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
从内存地址 src处装入 FLDENV src 保存的环境
保存FPU的 状态到dest FSAVE dest 处 94字节
从src处装 入由FSAVE 保存的FPU FRSTOR src 状态
FINCSTP
增加FPU的 栈指针值
st(6) <st(5); st(5) <st(4),..., st(0) <-?
FICOM op
将Flags值 设置为 st(0)-op 的结果op (mem16/mem 和整数比较 32)
FICOMP op
将st(0)和 op比较 op(mem16/m em32)后; 再执行一次 和整数比较 出栈操作
FTST
FUCOM st(i)
零检测
FUCOMP st(i)
FUCOMPP st(i)
从src装入 FPU CW <-
FPU的控制 src
FLDCW src 字
(mem16)
将FPU的控
制字保存到 dest<- FPU
FSTCW dest dest
CW
将FPU的控
制字保存到 dest<- FPU
FSTCW dest dest
CW
FCLEX
清除异常
FSTENV dest
保存环境到内存地址 dest处 保存状态字、 控制字、标志字和异<st(0) + st(1)
FADD src
st(0) <st(0) + src (mem32/mem 64)
FADD st(i),st
st(i) <st(i) + st(0)
FADDP st(i),st
st(i) <st(i) + st(0);然 后执行一次 出栈操作
FXAM
将st(0)和 0.0比较 比较st(0) 和st(i)
[486]
比较st(0) 和st(i), 并且执行一 次出栈操作
比较st(0) 和st(i), 并且执行两 次出栈操作
Examine: Eyeball st(0) (set condition codes)
3.运算指令
指令格式 指令含义 执行的操作
FIADD src
st(0) <-
st(0) +
src
加上一个整 (mem16/mem
数
32)
减法
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(0)
st(0) <exponent of st(0); and gets pushed
FXTRACT
Extract exponent:
st(0) <significan d of st(0)
Extract FXTRACT exponent:
FPREM FPREM1
取余数
st(0) <st(0) MOD st(1)
BCD保存到 st(0)
FBST dest dest
(mem80)
FBSTP dest 2.比较指令
dest<st(0) (mem80); 然后再执行 一次出栈操 作
指令格式 指令含义 执行的操作
FCOM
实数比较
将标志位设 置为 st(0) - st(1) 的 结果标志位
FCOM op
实数比较
将标志位设 置为 st(0) - op (mem32/mem 64)的结果 标志位
1. 数据传递和对常量的操作指令
指令格式 指令含义 执行的操作
FLD src
装入实数到 st(0) <-
st(0)
src
(mem32/mem
64/mem80)
FILD src
装入整数到 st(0) <-
st(0)
src
(mem16/mem
32/mem64)
FBLD src
装入BCD数 st(0) <到st(0) src
FMULP st(i),st
st(i) <st(0) * st(i),然 后执行一次 出栈操作
FIMUL src
st(0) <-
st(0) *
src
乘上一个整 (mem16/mem
数
32)
除法 FDIV
st(0) <-
除以一个实 st(0)
数
/st(1)
FDIV
st(0) <-
除以一个实 st(0)
FXCH
st(0) <-
交换指令, st(1) 交换st(0) st(1) <和st(1)的 st(0)
值
)的影响 ,dst/dest表示目的操作数 的数值表示该操作数的内存位数(8位为一字节)
将st(0)-st(1)的值放入浮点寄存器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/mem
FDECSTP
减少FPU的 栈指针值
st(0) <st(1); st(1) <st(2),..., st(7) <-?
FFREE st(i)
标志寄存器 st(i)未被 使用
FNOP
空操作,等 st(0) <同CPU的nop st(0)
FNOP
空操作,等 st(0) <同CPU的nop st(0)
同步FPU与CPU:停止 CPU的运行,直到FPU完 WAIT/FWAIT 成当前操作码
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) )
FCOS FPTAN FPATAN FSIN
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/mem
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/mem 64)
dest <-
st(0) (mem32/mem
取余数(IEEE),同 FPREM,但是使用IEEE 标准[486]
FRNDINT
st(0) <INT( st(0) 取整(四舍 ); depends 五入) on RC flag
FABS FCHS
求绝对值
st(0) <ABS( st(0) ); removes sign
改变符号位 st(0) <(求负数) st(0)
64/mem80)
;然后再执
行一次出栈
FSTP dest
操作
dest <-
将st(0)以 st(0) 整数保存到 (mem32/mem
FIST dest dest
64)
FISTP dest
dest <st(0) (mem16/mem 32/mem64) ;然后再执 行一次出栈 操作
将st(0)以 dest <-
数
32)
FDIVR st(i),st
FDIVRP st(i),st
用实数除
st(0) <st(i) /st(0)
FDIVRP st(i),st
FIDIVR src 用整数除
st(0) <src /st(0) (mem16/mem 32)
FSQRT
平方根
st(0) <sqrt st(0)
FSCALE
2的st(0)次 st(0) <- 2
数
32)
st(0) <-
src -
st(0)
用一个整数 (mem16/mem
FISUBR src 来减
32)
乘法
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)
余弦函数 Cos
st(0) <COS( st(0) )
正切函数 tan
st(0) <TAN( st(0) )
st(0) <反正切函数 ATAN( arctan st(0) )
正弦函数 sin
st(0) <SIN( st(0) )
FSINCOS
st(0) <SIN( st(0) ),并且压 入st(1) st(0) <COS( st(0) )
第2章 基础知识
第四节 浮点指令
对下面的指令先做一些说明: st(i):代表浮点寄存器,所说的出栈、入栈操作都是对st(i)的影响 src,dst,dest,op等都是指指令的操作数,src表示源操作数,dst/dest表示目的操作数 mem8,mem16,mem32,mem64,mem80等表示是内存操作数,后面的数值表示该操作数的内存 x <- y 表示将y的值放入x,例st(0) <- st(0) - st(1)表示将st(0)-st(1)的值放入浮
sincos函数
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
保存状态字 dest<-MSW FSTSW dest 的值到dest (mem16)
(mem80)
FLDZ FLD1 FLDPI FLDL2T
将0.0装入 st(0) <-
st(0)
0.0
将1.0装入 st(0) <-
st(0)
1.0
将pi装入 st(0) <-
st(0)
?(ie, pi)
将log2(10) st(0) <装入st(0) log2(10)
FLDL2E
将log2(e) st(0) <装入st(0) log2(e)