经典汇编语言教程:11.2.2 状态寄存器

11.2.2 状态寄存器

状态寄存器是用来标识协处理器中指令执行情况的,它相当于CPU中的标志位寄存器。80x87协处理器的状态寄存器如图11.5所示。

15131211870

B

C3

TOPC2C1C0ESSFPEUEOEZEDEIE

图11.5 80x87协处理器的状态寄存器示意图

状态寄存器各标志位(或组合位)的含义如下:

 B(Busy,忙)

忙标志位用来表明协处理器是否正在执行协处理器指令,它可用FWAIT指令来测试。在80287及其以后的协处理器中,协处理器和CPU能自动实现同步,所以,现在在运行任务时,无须测试忙标志。

C3~C0(条件编码位)

四位条件编码位的组合含义如表11.2所列。

表11.2 状态寄存器中条件编码位的组合含义

指 令

C3C2C1C0

功 能

FTST、FCOM00X0 ST>操作数或(0 FTST)
00X1 ST<操作数或(0 FTST)
10X0 ST=操作数或(0 FTST)
11X1 ST不可比较
FPREMQ10Q0Q2 Q2Q1Q0是商的右边3位
?1?? 未完成
FXAM0000 +unnormal
0001 +NAN
0010 -unnormal
0011 -NAN
0100 +normal
0101 +∞
0110 -unnormal
0111 -∞
1000 +0
1001 空
1010 -0
1011 空
1100 +denormal
1101 空
1110 -denormal
1111 空

其中,normal—标准的浮点数,unnormal—有效数字前面是0,如:0.XXXX,denormal—阶码是最大的负值,NAN—见11.1.3节中几个特殊数据的说明。

◆ TOP(栈顶)

该三位二进制000~111用来表明当前作为栈顶的寄存器,通常其值为000。

◆ ES(错误汇总)

ES=PE+UE+OE+ZE+DE+IE(逻辑或运算),在8087协处理器中,当ES为1时,将发出一个协处理器中断请求,但在其后的协处理器中,不再产生这样的协处理器中断申请。

◆ SF(堆栈溢出错误)

该状态位用来表明协处理器内部的堆栈是否有上溢或下溢错误。

◆ PE(精度错误)

该状态位用来表明运算结果或操作数是否超过先前设定的精度。

UE(下溢错误)

该状态位用来表明一个非0的结果太小,不能用控制字节所选定的当前精度来表示。

OE(上溢错误)

该状态位用来表明一个非0的结果太大,不能用控制字节所选定的当前精度来表示,即超过了当前精度所能表示的数据范围。

如果在控制寄存器中屏蔽该错误标志,即设控制寄存器中的OM为1,那么,协处理器把上溢结果定义为无穷大。

ZE(除法错误)

该状态位用来表明当前执行了“0作除数”的除法运算。

DE(非规格化错误)

该状态位用来表明当前参与运算的操作数中至少有一个操作数是没有规格化的。

◆ IE(非法错误)

该状态位用来表明执行了一个错误的操作,如:求负数的平方根,也可用来表明堆栈的溢出错误、不确定的格式(0/0,∞,-∞等)错误,或用NAN作为操作数。

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

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

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