在协处理器的指令系统中,有关数学运算指令有:加法指令、减法指令、乘法指令、除法指令和求平方根指令等。涉及数学运算的指令有比例运算、舍入运算、求绝对值运算和改变数值符号运算等指令。
1、加法指令
| 指令格式: | FADD | [STReg1, STReg2](*) | |
| FADD | MemReal | ||
| FADDP | STReg, ST | ||
| FIADD | MemInt | 
(*) 在此指令格式下,如果同时指定了二个堆栈寄存器,那么,其中一个寄存器必须是ST。其它指令的同类格式与此同理。
指令FADD含有二个隐含操作数ST(1)和ST,其运算功能是:从堆栈中弹出这二个操作数,然后把计算的“和”压入堆栈,即:ST=ST(1)+ST。
指令“FADD MemReal”的功能:ST=ST+MemReal
                     
指令“FADDP STReg, ST”的功能:STReg=STReg+ST,并弹出堆栈的栈顶
                    
指令“FIADD MemInt”的功能:ST=ST+MemInt
2、减法指令
| 指令格式: | FSUB | [STReg1, STReg2] | ||
| FSUB | MemReal | |||
| FSUBP | STReg, ST | |||
| FISUB | MemInt | |||
| FSUBR | [STReg1, STReg2] | ;后四条指令是前四条指令的反模式形式 | ||
| FSUBR | MemReal | |||
| FSUBRP | STReg,ST | |||
| FISUBR | MemInt | |||
指令FSUB含有二个隐含操作数ST(1)和ST,其运算功能是:从堆栈中弹出这二个操作数,然后把计算的“差”压入堆栈,即:ST=ST(1)-ST。
指令“FSUB MemReal”的功能:ST=ST-MemReal
                     
指令“FSUBP STReg, ST”的功能:STReg=STReg-ST,并弹出堆栈的栈顶
                    
指令“FISUB MemInt”的功能:ST=ST-MemInt
反模式的四条指令的功能在此从略,请参阅11.3.1中的有关说明。
3、乘法指令
| 指令格式: | FMUL | [STReg1, STReg2] | |
| FMUL | MemReal | ||
| FMULP | STReg, ST | ||
| FIMUL | MemInt | 
4、除法指令
| 指令格式: | FDIV | [STReg1, STReg2] | ||
| FDIV | MemReal | |||
| FDIVP | STReg, ST | |||
| FIDIV | MemInt | |||
| FDIVR | [STReg1, STReg2] | ;后四条指令是前四条指令的反模式形式 | ||
| FDIVR | MemReal | |||
| FDIVRP | STReg, ST | |||
| FIDIVR | MemInt | |||
例如:
| .387 | |||
| word1 | DW 20 | ||
| data1 | REAL8 8 | ||
| data2 | REAL8 -2 | ||
| data3 | REAL8 -12 | ||
| …… | |||
| FLD | data1 | ;本例只是显示指令的使用方法,无具体的实际功能 | |
| FLD | data2 | ||
| FLD | data3 | ||
| FDIV | ST(2), ST | ||
| FDIV | data1 | ||
| FDIVP | ST(2), ST | ||
| FIDIV | word1 | ||
5、其它数学运算指令
在协处理器中,除了完成具体的数学运算指令外,还设置了若干个与数学运算有关的运算指令。具体的运算指令及其功能描述如表11.4所列。
表11.4 与数学运算有关的其它指令
| 
         指令格式  | 
      
         指令的功能  | 
    
| 
         FSQRT  | 
      
         求栈顶数据的平方根。如果对负数求其平方根,则会发生错误,并可通过检测状态寄存器的标志位IE来确定。  | 
    
| 
         FSCALE  | 
      
         将ST(1)中的数(转换成整数)加上ST的阶码,该指令能快速完成乘/除2n的运算。ST(1)中的数必须在2-15到215之间。  | 
    
| 
         FPREM/FPREM1  | 
      
         ST=ST%ST(1),80387及其以后的协处理器支持FPREM1。  | 
    
| 
         FRNDINT  | 
      
         对栈顶数据进行舍入运算,使之转换成整数。  | 
    
| 
         FXTRACT  | 
      
         将栈顶数据分成二部分:无偏阶码和尾数。尾数存入栈顶,无偏阶码存入ST(1)。它常用将浮点数转换成小数形式打印输出。  | 
    
| 
         FABS  | 
      
         ST=|ST|,即:求栈顶数据的绝对值。  | 
    
| 
         FCHS  | 
      
         ST=-ST,即:改变栈顶数据的符号。  |