经典汇编语言教程:11.3.3 数学运算类指令

11.3.3 数学运算类指令

在协处理器的指令系统中,有关数学运算指令有:加法指令、减法指令、乘法指令、除法指令和求平方根指令等。涉及数学运算的指令有比例运算、舍入运算、求绝对值运算和改变数值符号运算等指令。

1、加法指令

指令格式:FADD[STReg1, STReg2](*)
FADDMemReal
FADDPSTReg, ST
FIADDMemInt

(*)在此指令格式下,如果同时指定了二个堆栈寄存器,那么,其中一个寄存器必须是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]
FSUBMemReal
FSUBPSTReg, ST
FISUBMemInt
FSUBR[STReg1, STReg2];后四条指令是前四条指令的反模式形式
FSUBRMemReal
FSUBRPSTReg,ST
FISUBRMemInt

指令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]
FMULMemReal
FMULPSTReg, ST
FIMULMemInt

4、除法指令

指令格式:FDIV[STReg1, STReg2]
FDIVMemReal
FDIVPSTReg, ST
FIDIVMemInt
FDIVR[STReg1, STReg2];后四条指令是前四条指令的反模式形式
FDIVRMemReal
FDIVRPSTReg, ST
FIDIVRMemInt

例如:

.387
word1DW 20
data1REAL8 8
data2REAL8 -2
data3REAL8 -12
……
FLDdata1;本例只是显示指令的使用方法,无具体的实际功能
FLDdata2
FLDdata3
FDIVST(2), ST
FDIVdata1
FDIVPST(2), ST
FIDIVword1

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,即:改变栈顶数据的符号。

上页:上一课 下页:下一课

经典汇编语言教程·相关目录

第1章 汇编语言的由来,数据类型第2章 CPU资源和存储器
第3章 操作数的寻址方式第4章 标识符和表达式
第5章 微机CPU的指令系统第6章 程序的基本结构
第7章 子程序和库第8章 输入输出和中断
第9章 宏第10章 应用程序设计
第11章 数值运算协处理器第12章 汇编语言和C语言
汇编语言重要附录Windows API函数大全
版权所有 © 中山市飞娥软件工作室 证书:粤ICP备09170368号