浮点指令性能
答案:2 悬赏:60
解决时间 2021-03-14 02:10
- 提问者网友:前事回音
- 2021-03-13 11:53
请问高手,浮点指令性能和整数性能分别是个什么概念?
最佳答案
- 二级知识专家网友:错过的是遗憾
- 2021-03-13 12:41
作为主CPU主要从事的运算,都是在许可范围内尽可能逼近的近似值,(相当多时候乘法比加法快,没想到吧?),而FPU这主要从事浮点运算,以前称之为协处理器,486以前并不包含在CPU中(8086~8087,80286~80287,80386~80387=80386DX, 80486SX~80487=80486DX,586=586+587……)浮点运算是高精度的运算方式,主要运用在科学和多媒体中。可以理解为小数点可移动的运算方式。目前速度AMD>>Inter
整数是指正整数、负整数和零,如-6、0、32 等。
浮点数是指带有有限位小数的有理数,如-10.8、0.00、25.01 等。
整数既可以是整数,也可以是浮点数,例如255 是整数,而255.0 则是浮点数。
整数运算,得到的结果是一个整数,并且计算结果中的小数部分将被忽略。例如:用整数运算时,100÷3=33。
浮点运算,得到的结果是一个浮点数,计算结果中的小数部分将保留下来。
例如:用浮点运算时,100.0÷3.0=33.33333333。
例如一颗子弹打到墙上,有一片土掉落,浮点运算强的,可能还能够把掉下来的灰尘也表现出来。
整数是指正整数、负整数和零,如-6、0、32 等。
浮点数是指带有有限位小数的有理数,如-10.8、0.00、25.01 等。
整数既可以是整数,也可以是浮点数,例如255 是整数,而255.0 则是浮点数。
整数运算,得到的结果是一个整数,并且计算结果中的小数部分将被忽略。例如:用整数运算时,100÷3=33。
浮点运算,得到的结果是一个浮点数,计算结果中的小数部分将保留下来。
例如:用浮点运算时,100.0÷3.0=33.33333333。
例如一颗子弹打到墙上,有一片土掉落,浮点运算强的,可能还能够把掉下来的灰尘也表现出来。
全部回答
- 1楼网友:晚安听书人
- 2021-03-13 13:37
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)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)
我要举报
如以上问答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯
• 手机登qq时,显示手机磁盘不足,清理后重新登 |
• 刺客的套装怎么选啊? |