日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

X87 FPU 指令集

發(fā)布時間:2023/12/8 编程问答 42 豆豆
生活随笔 收集整理的這篇文章主要介紹了 X87 FPU 指令集 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
FPU指令集
(1) FPU數(shù)據(jù)傳輸指令集
fld將浮點(diǎn)值壓入寄存器棧,源操作數(shù)可以是ST(i)或內(nèi)存地址
fild從內(nèi)存中讀取一個有符號整型操作數(shù),將該值轉(zhuǎn)換為擴(kuò)展雙精度值,并將此結(jié)果加載到寄存器棧中
fbld從內(nèi)存中讀取壓縮BCD操作數(shù),將該值轉(zhuǎn)換為一個擴(kuò)展雙精度值,并將結(jié)果加載到推棧
fst拷貝ST(0)到ST(i)或內(nèi)存位置
fstp執(zhí)行與fst同樣的操作,并且進(jìn)行彈棧操作
fist將ST(0)中的值轉(zhuǎn)換為一個整型數(shù),并將結(jié)果保存到指定的內(nèi)存的位置
fistp執(zhí)行與fist同樣的操作,并且進(jìn)行彈棧操作
fisttp利用截斷ST(0)中的值轉(zhuǎn)換為整型數(shù),把結(jié)果保存到指定的內(nèi)存位置,同時彈出推棧本指令在支持SSE3的處理器中才有效
fbstp將ST(0)中的值轉(zhuǎn)換為組合BCD格式,保存結(jié)果到指定的存儲位置,并彈出推棧
fxch交換寄存器ST(O)和ST(i)的內(nèi)容
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------
fcmovcc如果指定條件為真,則有條件地將ST(i)的內(nèi)容復(fù)制到ST(0)。
fcmovcc指令的條件碼
B小于 (CF==1)
NB不小于 (CF==0)
E等于(ZF==1)
NE不等于(ZF==0)
BE小于或等于(CF==1 or ZF ==1)
NBE不小于或等于(CF=0 and ZF==0)
U無序的(PF==1)
NU有序的(PF==0)
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------
(2)FPU基本運(yùn)算指令集
fadd源操作數(shù)和目標(biāo)操作數(shù)相加源操作數(shù)可以是內(nèi)存地址或者FPU寄存器,目標(biāo)操作數(shù)必須是FPU寄存器
faddpST(i)和ST(0)相加,計算結(jié)果存入ST(0)中
fsub從目標(biāo)操作數(shù)(被減數(shù))中減去的源操作數(shù)(減數(shù)),結(jié)果存入目標(biāo)操作數(shù),源操作數(shù)可以是內(nèi)存地址或者FPU寄存器,目標(biāo)操作數(shù)必須是FPU寄存器
fiaddST(0)與指定的整型操作數(shù)相加,并把結(jié)果存入ST(0)
fsubr從源操作數(shù)(被減數(shù))中減去的目標(biāo)操作數(shù)(減數(shù)),結(jié)果存入目標(biāo)操作數(shù),源操作數(shù)可以是內(nèi)存地址或者FPU寄存器,目標(biāo)操作數(shù)必須是FPU寄存器
fsubp從ST(i)中減去ST(0),保存差值到ST(i),彈出推棧
fsubrp從ST(0)中減去ST(i),保存差值到ST(i),彈出推棧
fisub從ST(0)中減去指定的整型數(shù)操作數(shù),保存差值到ST(0)
fisubr從指定的整型操作數(shù)中減去ST(0),保存差值到ST(0)
fmul源操作數(shù)和目標(biāo)操作數(shù)相乘,乘積存入目標(biāo)操作數(shù),源操作數(shù)可以是內(nèi)存地址或者FPU寄存器,目標(biāo)操作數(shù)必須是FPU寄存器
fmulpST(i)和ST(0)相乘,乘積存入ST(i)中,并彈出推棧
fimulST(0)與指定的整型操作數(shù)相乘,乘積存入ST(0)中
fdiv目標(biāo)操作數(shù)(被除數(shù))除以源操作數(shù)(除數(shù))。源操作數(shù)可以是內(nèi)存地址或者FPU寄存器,目標(biāo)操作數(shù)必須是FPU寄存器
fdivr源操作數(shù)(被除數(shù))除以目標(biāo)操作數(shù)(除數(shù))。源操作數(shù)可以是內(nèi)存地址或者FPU寄存器,目標(biāo)操作數(shù)必須是FPU寄存器
fdivpST(i)除以ST(0),商保存到ST(i)中,并彈出推棧
fdivrpST(0)除以ST(i),商保存到ST(i)中,并彈出推棧
fidivST(0)除以指定的整型操作數(shù),商保存ST(0)中
fidivr用指定的整型操作數(shù)除以ST(0),商保存到ST(0)中
fprem計算ST(0)除以ST(1),得到的余數(shù)存入ST(0)。這條指令常用在計算余數(shù)的循環(huán)中
fpreml類似 fprem 指令 不過計算余數(shù)的時候用的是IEEE754 標(biāo)準(zhǔn)指定的算法
fabs計算ST(0)的絕對值,并將結(jié)果存入ST(0)中
fchs補(bǔ)充ST(0)的符號位,并將結(jié)果保存到ST(0)
frndint對ST(0)中的值舍入到最近的整型數(shù),將結(jié)果存入ST(0)中,使用FPU控制字中的RC位域來指定舍入的方式
fsqrt計算ST(0)的平方根,結(jié)果存入ST(0)
fxtract分離ST(0)的指數(shù)部分和有效數(shù)部分,執(zhí)行完指令后,ST(0)中包含有效數(shù),ST(1)中包含指數(shù)
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------
(3)FPU數(shù)據(jù)比較指令
fcom比較ST(0)與ST(i),或者比較ST(0)與內(nèi)存操作數(shù),同時基于比較結(jié)果設(shè)置FPU條件碼標(biāo)志
fcomp和(fcompp)比較ST(0)與ST(i),或者比較ST(0)與內(nèi)存操作數(shù),設(shè)置FPU條件碼標(biāo)志,同時彈出推棧 。 (fcompp 指令進(jìn)行倆次彈棧)
fucom執(zhí)行ST(0)和ST(i)的無序比較操作,根據(jù)結(jié)果設(shè)置FPU條件碼標(biāo)志
fucomp和(fucompp)執(zhí)行ST(0)與ST(i)的無序比較操作,設(shè)置FPU條件碼標(biāo)志,并彈出推棧(fucompp 彈棧倆次)
ficom比較ST(0)與內(nèi)存中的整型操作數(shù),根據(jù)FPU條件碼標(biāo)志
ficomp比較ST(0)與內(nèi)存中的整型操作數(shù),設(shè)置FPU條件碼標(biāo)志,同時彈出推棧
fcomi比較ST(0)與ST(i),同時根據(jù)結(jié)果直接設(shè)置EFLAGS.CF,EFLAGS.PF和EFLAGS.ZF
fcomip執(zhí)行與fcomi指令同樣操作,同時彈出推棧
fucomi執(zhí)行ST(0)與ST(i)的無序比較操作,同時根據(jù)結(jié)果直接設(shè)置EFLAGS.CF,EFLAGS.PF和EFLAGS.ZF
fucomip執(zhí)行與fucomi指令同樣的操作,同時彈出推棧
ftst比較ST(0)與0.0,根據(jù)結(jié)果設(shè)置FPU條件碼標(biāo)志
fxam檢查ST(0)并設(shè)置FPU條件碼標(biāo)志,表明值所屬的類,可能的類非規(guī)范數(shù),空狀態(tài),無窮大,NaN,正常有限數(shù),不支持的格式和0
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------
(4)FPU超越函數(shù)指令集
fsin計算ST(0)的正弦值并將結(jié)果存入ST(0)中
fcos計算ST(0)的余弦值并將結(jié)果存入ST(0)中
fsincos計算ST(0)的正弦值和余弦值,執(zhí)行完指令后,ST(0)和ST(1)中分別包含源操作數(shù)的正弦和余弦值
fptan計算ST(0)的正切值并將結(jié)果存入ST(0)中,同時將常數(shù)1.0壓入推棧
fpatan計算ST(0)除以ST(0)的反正切值,同時將結(jié)果存入ST(0)中
f2xm1計算2^(ST(0)-1)同時把結(jié)果存入ST(0),源操作數(shù)的值必須在-1.0 到+1.0之間
fy12x計算ST(1)*log2(ST(0)),結(jié)果存入ST(1),并彈出推棧
fy12xp1計算ST(1)*log2(ST(0)+1.0),結(jié)果存入ST(1),并彈出推棧
fscale截斷(向0舍入)ST(1)的值,并將此值與ST(0)的指數(shù)部分相加,這指令用來對2的整數(shù)冪做快速乘除計算
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------
(5)FPU常量指令集
fld1把常數(shù)+1.0壓入FPU寄存器棧
fldz把常數(shù)+0.0壓入FPU寄存器棧
fldpi把常數(shù) π 壓入FPU寄存器棧
fldl2e把常數(shù)值log2(e)壓入FPU寄存器棧
fldln2把常數(shù)值ln(2)壓入FPU寄存器棧
fld2t把常數(shù)log2(10)壓入FPU寄存器棧
fldlg2把常數(shù)log10(2)壓入FPU寄存器棧
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------
(6)FPU控制指令集
finit和 (fninit)初始化FPU至缺省狀態(tài)
fincstp通過對FPU狀態(tài)字中的TOS域加1,更改當(dāng)前的推棧指針位置,FPU數(shù)據(jù)寄存器和標(biāo)記字的內(nèi)容不被修改,也就是說,改指令不等用于入棧,此指令可用于手動管理FPU寄存器棧
fdecstp通過對FPU狀態(tài)字中的TOS域減1,更改當(dāng)前的推棧指針位置,FPU數(shù)據(jù)寄存器和標(biāo)記字的內(nèi)容不被修改,也就是說,改指令不等用于入棧,此指令可用于手動管理FPU寄存器棧
ffree通過設(shè)置相應(yīng)的標(biāo)記字狀態(tài)為空,釋放FPU浮點(diǎn)寄存器
flcdw從指定的內(nèi)存位置加載FPU控制字
fstcw 和(fmstcw)把FPU控制字保存到指定的內(nèi)存位置
fstsw和(fnstsw)把FPU狀態(tài)字保存到AX寄存器或者內(nèi)存位置
fclex和(fnclex)清除以下FPU狀態(tài)字位:PE,UE,OE,ZE,DE,IE,ES,SF和B。執(zhí)行完此指令后,條件碼標(biāo)志C0,C1,C2和C3處于未定義狀態(tài)
fstenv和(fnstenv)把當(dāng)前FPU執(zhí)行環(huán)境保存到內(nèi)存,包括控制字,狀態(tài)字,標(biāo)記字,FPU數(shù)據(jù)指針,FPU指令指針和FPU最后一條指令操作碼
fldenv從內(nèi)存中加載FPU執(zhí)行環(huán)境
fsave和(fnasve)保存當(dāng)前FPU運(yùn)行狀態(tài),包括所有數(shù)據(jù)寄存器的內(nèi)容和以下項(xiàng):控制字,狀態(tài)字,標(biāo)記字,FPU數(shù)據(jù)指針,FPU指令指針和FPU最后一條指令操作數(shù)碼
frstor從內(nèi)存中加載FPU的運(yùn)行狀態(tài)
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------
FPUCMOV移動指令
fcmovb如果st(0)小于st(x),則進(jìn)行傳送
fcmove如果st(0)等于st(x),則進(jìn)行傳送
fcmovbe如果st(0)小于或等于st(x),則進(jìn)行傳送
fcmovu如果st(0)無序,則進(jìn)行傳送
fcmovnb如果st(0)不小于st(x),則進(jìn)行傳送
fcmovne如果st(0)不等于st(x),則進(jìn)行傳送
fcmovnbe如果st(0)不小于或等于st(x),則進(jìn)行傳送
fcmovnu如果st(0)非無序,則進(jìn)行傳送

總結(jié)

以上是生活随笔為你收集整理的X87 FPU 指令集的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。