以前就听说过浮点运算,但是只是听说过名称而已,很少运用,今天因为写程序需要用到浮点运算的运算命令,瞬间头晕了,这是什么玩意儿,说好的实数运算怎么在计算机上变成这么复杂的东西,今天就总结一下平时需要用到的浮点运算指令:
首先需要认清一点浮点运算就是数学里的实数运算,只不过是要在计算机中运算存储罢了,因为计算机只能存储整数,因此要想在计算机上进行浮点运算的确有点麻烦。
浮点运算使用三种不同的数据:
1、整数(Integer),又分为字,短整数(Short Integer)和长整数(Long Integer)
2、实数(Real)分单精度(Single Real)和双精度(Double Real)
3、压缩的二十进制数(BCD)
浮点运算数据传输指令:这类指令主要是从内存装入浮点寄存器堆数据,一般目的地址总是栈顶ST(0),用调试器你可以清楚地看到这一点.注意带P结尾的操作,是在前面操作完成之后出栈,也就是原来ST(1)的内容现在成了ST(0)的内容:
下面浮点指令:
指令 | 功能 |
EMMS | 媒体空MMX状态 |
F2XM1 | 浮点栈顶绝对值 |
FADD | 浮点加 |
FADDP | 浮点加出栈 |
FBLD | 浮点加载十数 |
FBSTP | 浮点保存十数出栈 |
FCHS | 浮点正负求反 |
FCLEX | 浮点检查错误清除 |
FCMOVB | 浮点低于传送 |
FCMOVBE | 浮点不高于传送 |
FCMOVE | 浮点相等传送 |
FCMOVNB | 浮点不低于传送 |
FCMOVNBE | 浮点高于传送 |
FCMOVNE | 浮点不等传送 |
FCMOVNU | 浮点有序传送 |
FCMOVU | 浮点无序传送 |
FCOM | 浮点比较 |
FCOMI | 浮点比较加载标志 |
FCOMIP | 浮点比较加载标志出栈 |
FCOMP | 浮点比较出栈 |
FCOMPP | 浮点比较出栈二 |
FCOS | 浮点余弦 |
FDECSTP | 浮点栈针减一 |
FDISI | 浮点检查禁止中断 |
FDIV | 浮点除 |
FDIVP | 浮点除出栈 |
FDIVR | 浮点反除 |
FDIVRP | 浮点反除出栈 |
FENI | 浮点检查禁止中断二 |
FFREE | 浮点释放 |
FFREEP | 浮点释放出栈 |
FIADD | 浮点加整数 |
FICOM | 浮点比较整数 |
FICOMP | 浮点比较整数出栈 |
FIDIV | 浮点除整数 |
FIDIVR | 浮点反除 |
FILD | 浮点加载整数 |
FIMUL | 浮点乘整数 |
FINCSTP | 浮点栈针加一 |
FINIT | 浮点检查初始化 |
FIST | 浮点保存整数 |
FISTP | 浮点保存整数出栈 |
FISTTP | |
FISUB | 浮点减整数 |
FISUBR | 浮点反减整数 |
FLD | 浮点加载数 |
FLD1 | 浮点加载一 |
FLDCW | 浮点加载控制器 |
FLDENV | 浮点加载环境 |
FLDL2E | 浮点加载L2E |
FLDL2T | 浮点加载L2T |
FLDLG2 | 浮点加载LG2 |
FLDLN2 | 浮点加载LN2 |
FLDPI | 浮点加载PI |
FLDZ | 浮点加载零 |
FMUL | 浮点乘 |
FMULP | 浮点乘出栈 |
FNCLEX | 浮点不检查错误清除 |
FNDISI | 浮点不检查禁止中断 |
FNENI | 浮点不检查禁止中断二 |
FNINIT | 浮点不检查初始化 |
FNOP | 浮点空 |
FNSAVE | 浮点不检查保存状态 |
FNSTCW | 浮点不检查保存控制器 |
FNSTENV | 浮点不检查保存环境 |
FNSTSW | 浮点不检查保存状态器 |
FPATAN | 浮点部分反正切 |
FPREM | 浮点部分余数 |
FPREM1 | 浮点部分余数二 |
FPTAN | 浮点部分正切 |
FRNDINT | 浮点舍入求整 |
FRSTOR | 浮点恢复状态 |
FSAVE | 浮点检查保存状态 |
FSCALE | 浮点比例运算 |
FSETPM | 浮点设置保护 |
FSIN | 浮点正弦 |
FSINCOS | 浮点正余弦 |
FSQRT | 浮点平方根 |
FST | 浮点保存 |
FSTCW | 浮点检查保存控制器 |
FSTENV | 浮点检查保存环境 |
FSTP | 浮点保存出栈 |
FSTSW | 浮点检查保存状态器 |
FSUB | 浮点减 |
FSUBP | 浮点减出栈 |
FSUBR | 浮点反减 |
FSUBRP | 浮点反减出栈 |
FTST | 浮点比零 |
FUCOM | 浮点无序比较 |
FUCOMI | 浮点反比加载标志 |
FUCOMIP | 浮点反比加载标志出栈 |
FUCOMP | 浮点无序比较出栈 |
FUCOMPP | 浮点无序比较出栈二 |
FWAIT | 浮点等 |
FXAM | 浮点检查 |
FXCH | 浮点交换 |
FXTRACT | 浮点分解 |
FYL2X | 浮点求L2X |
FYL2XP1 | 浮点求L2XP1 |
MOVED | 媒体双字传送 |
MOVEQ | 媒体四字传送 |
PACKSSDW | 媒体符号双字压缩 |
PACKSSWB | 媒体符号字压缩 |
PACKUSWB | 媒体无符号字压缩 |
PADDB | 媒体截断字节加 |
PADDD | 媒体截断双字加 |
PADDSB | 媒体符号饱和字节加 |
PADDSIW | |
PADDSW | 媒体符号饱和字加 |
PADDUSB | 媒体无符号饱和字节加 |
PADDUSW | 媒体无符号饱和字加 |
PADDW | 媒体截断字加 |
PAND | 媒体与 |
PANDN | 媒体与非 |
PAVEB | |
PCMPEQB | 媒体字节比等 |
PCMPEQD | 媒体双字比等 |
PCMPEQW | 媒体字比等 |
PCMPGTB | 媒体字节比大 |
PCMPGTD | 媒体双字比大 |
PCMPGTW | 媒体字比大 |
PDISTIB | |
PMACHRIW | |
PMADDWD | |
PMAGW | |
PMULHRIW | |
PMULHRWC | |
PMULHW | |
PMVGEZB | |
PMVLZB | |
PMVNZB | |
PMVZB | |
POR | 媒体或 |
PSLLD | 媒体双字左移 |
PSLLQ | 媒体四字左移 |
PSLLW | 媒体字左移 |
PSRAD | 媒体双字算术右移 |
PSRAW | 媒体字算术右移 |
PSRLD | 媒体双字右移 |
PSRLQ | 媒体四字右移 |
PSRLW | 媒体字右移 |
PSUBB | 媒体截断字节减 |
PSUBSB | 媒体符号饱和字节减 |
PSUBSIW | |
PSUBSW | 媒体符号饱和字减 |
PSUBUSB | 媒体无符号饱和字节减 |
PSUBUSW | 媒体无符号饱和字减 |
PSUBW | 媒体截断字减 |
PUNPCKHBW | 媒体字节高位解压 |
PUNPCKHDQ | 媒体双字高位解压 |
PUNPCKHWD | 媒体字高位解压 |
PUNPCKLBW | 媒体字节低位解压 |
PUNPCKLDQ | 媒体双字低位解压 |
PUNPCKLWD | 媒体字低位解压 |