X87 FPU 指令集
                                                            生活随笔
收集整理的這篇文章主要介紹了
                                X87 FPU 指令集
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.                        
                                | (1) FPU | 數(shù)據(jù)傳輸指令集 | 
| fld | 將浮點值壓入寄存器棧,源操作數(shù)可以是ST(i)或內(nèi)存地址 | 
| fild | 從內(nèi)存中讀取一個有符號整型操作數(shù),將該值轉(zhuǎn)換為擴展雙精度值,并將此結(jié)果加載到寄存器棧中 | 
| fbld | 從內(nèi)存中讀取壓縮BCD操作數(shù),將該值轉(zhuǎn)換為一個擴展雙精度值,并將結(jié)果加載到推棧 | 
| fst | 拷貝ST(0)到ST(i)或內(nèi)存位置 | 
| fstp | 執(zhí)行與fst同樣的操作,并且進行彈棧操作 | 
| fist | 將ST(0)中的值轉(zhuǎn)換為一個整型數(shù),并將結(jié)果保存到指定的內(nèi)存的位置 | 
| fistp | 執(zhí)行與fist同樣的操作,并且進行彈棧操作 | 
| 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 | 基本運算指令集 | 
| fadd | 源操作數(shù)和目標操作數(shù)相加源操作數(shù)可以是內(nèi)存地址或者FPU寄存器,目標操作數(shù)必須是FPU寄存器 | 
| faddp | ST(i)和ST(0)相加,計算結(jié)果存入ST(0)中 | 
| fsub | 從目標操作數(shù)(被減數(shù))中減去的源操作數(shù)(減數(shù)),結(jié)果存入目標操作數(shù),源操作數(shù)可以是內(nèi)存地址或者FPU寄存器,目標操作數(shù)必須是FPU寄存器 | 
| fiadd | ST(0)與指定的整型操作數(shù)相加,并把結(jié)果存入ST(0) | 
| fsubr | 從源操作數(shù)(被減數(shù))中減去的目標操作數(shù)(減數(shù)),結(jié)果存入目標操作數(shù),源操作數(shù)可以是內(nèi)存地址或者FPU寄存器,目標操作數(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ù)和目標操作數(shù)相乘,乘積存入目標操作數(shù),源操作數(shù)可以是內(nèi)存地址或者FPU寄存器,目標操作數(shù)必須是FPU寄存器 | 
| fmulp | ST(i)和ST(0)相乘,乘積存入ST(i)中,并彈出推棧 | 
| fimul | ST(0)與指定的整型操作數(shù)相乘,乘積存入ST(0)中 | 
| fdiv | 目標操作數(shù)(被除數(shù))除以源操作數(shù)(除數(shù))。源操作數(shù)可以是內(nèi)存地址或者FPU寄存器,目標操作數(shù)必須是FPU寄存器 | 
| fdivr | 源操作數(shù)(被除數(shù))除以目標操作數(shù)(除數(shù))。源操作數(shù)可以是內(nèi)存地址或者FPU寄存器,目標操作數(shù)必須是FPU寄存器 | 
| fdivp | ST(i)除以ST(0),商保存到ST(i)中,并彈出推棧 | 
| fdivrp | ST(0)除以ST(i),商保存到ST(i)中,并彈出推棧 | 
| fidiv | ST(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 標準指定的算法 | 
| fabs | 計算ST(0)的絕對值,并將結(jié)果存入ST(0)中 | 
| fchs | 補充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條件碼標志 | 
| fcomp和(fcompp) | 比較ST(0)與ST(i),或者比較ST(0)與內(nèi)存操作數(shù),設(shè)置FPU條件碼標志,同時彈出推棧 。 (fcompp 指令進行倆次彈棧) | 
| fucom | 執(zhí)行ST(0)和ST(i)的無序比較操作,根據(jù)結(jié)果設(shè)置FPU條件碼標志 | 
| fucomp和(fucompp) | 執(zhí)行ST(0)與ST(i)的無序比較操作,設(shè)置FPU條件碼標志,并彈出推棧(fucompp 彈棧倆次) | 
| ficom | 比較ST(0)與內(nèi)存中的整型操作數(shù),根據(jù)FPU條件碼標志 | 
| ficomp | 比較ST(0)與內(nèi)存中的整型操作數(shù),設(shè)置FPU條件碼標志,同時彈出推棧 | 
| 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條件碼標志 | 
| fxam | 檢查ST(0)并設(shè)置FPU條件碼標志,表明值所屬的類,可能的類非規(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,更改當前的推棧指針位置,FPU數(shù)據(jù)寄存器和標記字的內(nèi)容不被修改,也就是說,改指令不等用于入棧,此指令可用于手動管理FPU寄存器棧 | 
| fdecstp | 通過對FPU狀態(tài)字中的TOS域減1,更改當前的推棧指針位置,FPU數(shù)據(jù)寄存器和標記字的內(nèi)容不被修改,也就是說,改指令不等用于入棧,此指令可用于手動管理FPU寄存器棧 | 
| ffree | 通過設(shè)置相應(yīng)的標記字狀態(tài)為空,釋放FPU浮點寄存器 | 
| 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í)行完此指令后,條件碼標志C0,C1,C2和C3處于未定義狀態(tài) | 
| fstenv和(fnstenv) | 把當前FPU執(zhí)行環(huán)境保存到內(nèi)存,包括控制字,狀態(tài)字,標記字,FPU數(shù)據(jù)指針,FPU指令指針和FPU最后一條指令操作碼 | 
| fldenv | 從內(nèi)存中加載FPU執(zhí)行環(huán)境 | 
| fsave和(fnasve) | 保存當前FPU運行狀態(tài),包括所有數(shù)據(jù)寄存器的內(nèi)容和以下項:控制字,狀態(tài)字,標記字,FPU數(shù)據(jù)指針,FPU指令指針和FPU最后一條指令操作數(shù)碼 | 
| frstor | 從內(nèi)存中加載FPU的運行狀態(tài) | 
| - | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------- | 
| FPU | CMOV移動指令 | 
| fcmovb | 如果st(0)小于st(x),則進行傳送 | 
| fcmove | 如果st(0)等于st(x),則進行傳送 | 
| fcmovbe | 如果st(0)小于或等于st(x),則進行傳送 | 
| fcmovu | 如果st(0)無序,則進行傳送 | 
| fcmovnb | 如果st(0)不小于st(x),則進行傳送 | 
| fcmovne | 如果st(0)不等于st(x),則進行傳送 | 
| fcmovnbe | 如果st(0)不小于或等于st(x),則進行傳送 | 
| fcmovnu | 如果st(0)非無序,則進行傳送 | 
總結(jié)
以上是生活随笔為你收集整理的X87 FPU 指令集的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
 
                            
                        - 上一篇: android 精品软件,《分享精彩应用
- 下一篇: 程序员团队名称和口号_这50个团建活动的
