协处理器控制指令
协处理器控制指令是用来实现控制协处理器状态而设置的,它包括协处理器的初始化、状态寄存器内容的存取、异常处理和任务切换等操作。具体的指令及其功能说明如表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的根。


