📄 汇011.txt
字号:
栈顶数据与内存单元进行整数比较。指令FICOMP还要弹出栈顶数据。
FUCOM [STReg]
FUCOMP [STReg]
FUCOMPP
反向比较,其功能与上面同类指令类似。
FTST
栈顶数据与0进行比较。比较结果对条件编码位的影响如表11.2所示。
FXAM
检测栈顶数据是正数、负数,还是规格化数。比较结果对条件编码位的影响如表11.2所示。
11.3.5 超越函数运算指令
超越函数运算指令是用来实现三角函数或一些特殊的算术表达式而设置的,具体的指令及其功能说明如表11.6所列。
表11.6 超越函数运算指令及其功能
指令格式
指令的功能
FPTAN
求部分Y/X=tanθ,角度θ存于栈顶,其结果:
ST=X,ST(1)=Y
(1)、在8087-80287中,角度θ的范围上是0~π/4;
(2)、在80387以后的协处理器中,角度θ的范围上是0~263;
如果交度超过其取值范围,则状态IE标定为非法错误。
FPATAN
求部分反正切值θ=arctan(X/Y),X取自ST,Y取自ST(1);
其中:X和Y必须满足:0≤Y<X<∞;
指令执行时进行一次弹出操作,结果存入栈顶。
F2XM1
求2X-1的值,X取自栈顶,结果也存放栈顶,X的取值范围:-1~1。
FCOS或FSIN
求栈顶ST中角度的正弦或余弦值,ST中存放的是弧度。
运算结果也存于ST。
FSINCOS
求栈顶ST中角度的正弦和余弦值,ST中存放的是弧度。
运算结果:ST=正弦值,ST(1)=余弦值。
FYL2X
计算Ylog2X的值,X=ST,Y=ST(1),其中:X>0。
结果存入有一个弹出操作后的栈顶。
FYL2XP1
计算Ylog2(X+1)的值,X=ST,Y=ST(1),其中:0<X<1-2-0.5。
结果存入有一个弹出操作后的栈顶。
11.3.6 常数操作指令
为了计算的方便,协处理器提供了几个将常用常数压栈的指令。如表11.7所示。
表11.7 常数压栈指令及其常数值
指令格式 指令的功能 指令格式 指令的功能
FLDZ
ST=+0.0
FLDL2T
ST= log210
FLD1
ST=+1.0
FLDLG2
ST= log102
FLDPI
ST=π
FLDLN2
ST= loge2
FLDL2E
ST=log2e
11.3.7 协处理器控制指令
协处理器控制指令是用来实现控制协处理器状态而设置的,它包括协处理器的初始化、状态寄存器内容的存取、异常处理和任务切换等操作。具体的指令及其功能说明如表11.8所列。
表11.8 比较运算指令及其功能
指令格式
指令的功能
FINIT/FNINIT
初始化协处理器,初始化后协处理器的状态如表11.9所列。
FLDCW Mem16
将由操作数指定的字存储单元内容存储到控制寄存器中。
FSTCW Mem16
FNSTCW Mem16
把控制寄存器的内容存储到由操作数指定的字存储单元。与指令“FLDCW”相对应。
FSTSW Mem16
FSTSW AX
FNSTSW Mem16
FNSTSW AX
将控制寄存器的内容传送到寄存器AX中。
在8087协处理器中无此指令。
FCLEX/FNCLEX
清除状态寄存器中的“错误”和“忙”标志。
FSAVE Mem
FNSAVE Mem
将全部机器状态存储到内存中。
FRSTOR Mem
从内存复原机器状态,它可恢复由指令“FSAVE/FNSAVE”保存的信息。
FSTENV Mem
FNSTENVMem
存储协处理器环境。
FLDENV Mem
重新装入由指令FSTENV/FNSTENV存储的协处理器环境
FINCST
堆栈指针加1。
FDECSTP
堆栈指针减1。
FFREE ST(i)
释放堆栈寄存器,即使其标记为空,但其内容并没有改变。
FNOP
协处理器的空操作
FWAIT
使处理器处于等待状态,以便协处理器完成其操作。该指令主要用于在CPU访问被协处理器影响的内存数据之前。
表11.9 协处理器初始化的状态
控制项 值 状态含义
控制位IC
0
投影
控制位PC
10
扩展精度
控制位RC
00
最近舍入或偶数
错误屏蔽
11111
错误位关闭
忙标志
0
不忙
C3~C0
????
未定
TOP
000
堆栈栈顶设定为寄存器0
ES
0
无错误
错误位
00000
无错误
全部标记
11
空
寄存器
--
不改变
11.4 协处理器的编程举例
本节提供几个利用协处理器进行编程的例子,从这些例子可看出使用协处理器指令编程的方法和技巧。
例11.6 假设圆的半径存于数组RAD中,计算出每个圆的面积,并存于数组AREA中。
解:
例11.7 已知L=0.0001,C=0.002,试计算下列公式的值,并存于单精度数F中。
解:
例11.8 已知L=4.0,F按每次递增10.0的幅度从10.0增加到1000.0,试按公式Y=2πFL,计算出100个Y值,并把它们存入数组RES中。
解:显示解答
例11.9 把内存单元DATA中存放的单精度浮点数以小数的形式显示在屏幕上。
解:显示解答
例11.10 从键盘上读入一个带小数的数字字符串,然后把它转换成单精度浮点数,并存入内存单元DATA中。
解:显示解答
例11.11 编写一个子程序,求解一元二次方程的根ax2 + bx + c = 0的根。
解:显示解答
11.5 习题
11.1、简述协处理器可以处理的三种整型数据格式、三种浮点数据格式及其表示范围。
11.2、简述BCD码数据在内存中所占的位数和存储的形式。
11.3、在MASM V6.11中,如何定义三种不同精度的浮点数?试举例说明。
11.4、写出满足下列要求的变量定义语句。
1)、存储双精度数23.44到内存FROG处;
2)、存储32位有符号整数-123到内存Data2处;
3)、存储单精度数-23.8到内存Data3处。
11.5、什么是+0、-0和NAN?
11.6、将下列各数转换成单精度浮点数。
1)、28.75
3)、–0.615
5)、-1000.5
2)、624
4)、+0.0
6)、89.6
11.7、将下列单精度浮点数转换成十进制数。
1)、11000000 11110000 00000000 00000000
2)、00111111 00010000 00000000 00000000
3)、01000011 10011001 00000000 00000000
4)、01000000 00000000 00000000 00000000
5)、01000001 00100000 00000000 00000000
11.8、状态寄存器中,C3~C0的作用是什么?
11.9、状态寄存器中,IE位的作用是什么?
11.10、在80X87中如何选择舍入模式?
11.11、协处理器指令的一般命名规则有哪些?
11.12、哪条协处理器指令用到微处理器的AX寄存器?
11.13、协处理器复位时,栈顶寄存器是 ?
11.14、简述下列协处理器指令的功能。
1)、FSTSW AX
2)、FINIT
3)、FADD
4)、FSTP DATA
5)、FST DATA
6)、F2XM1
7)、FFREE ST(2)
8)、FSAVE
9)、FILD Data
10)、FCHS
11.15、“除”和“反向除”有何不同?
11.16、简述FTST和FXAM指令之间的差异。
11.17、简述FSTSW和FNSTSW指令之间的差异。
11.18、FSQRT指令执行后,必须测试处理器状态寄存器的哪个标志位?
11.19、何时在程序中使用指令FWAIT?
11.20、分别选用一条协处理器指令,完成下列功能。
1)、将π压入栈顶
2)、将1.0送入栈顶
3)、将栈顶中的数加上寄存器3中的数
4)、将栈顶中的数减去寄存器2中的数,结果存入寄存器2中
11.21、何时在程序中使用指令FWAIT?
11.22、对下列每一种功能要求,编写一个汇编语言程序实现之(假设未注明的变量都是单精度浮点类型)。
1)、Delta = sqrt(b2 – 4ac)
2)、EBX=π×EBX ;EBX是32位寄存器
3)、E = (a+b)/(c-d)
4)、C=1/(27×л×F)
5)、把2~10各整数的平方根依次存入单精度浮点数组ROOTS
6)、假设有三个都含有100个元素的双精度浮点数数组D1、D2和D3,试依次计算:D3(i)=D2(i)×D1(i),i=1, 2, ……, 100
11.23、根据公式Log10X=Log2X/Log210,编写子程序LOGl0,它用以求栈顶以10为底的对数值,结果仍存入栈顶。
再按公式D3(i)=20×Log10(D2(i)/D1(i))计算20组数据,其中:D1、D2和D3均是含有20个元素的单精度浮点数数组。
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -