111111
精灵王
精灵王
  • 注册日期2010-12-08
  • 发帖数640
  • QQ
  • 火币1103枚
  • 粉丝120
  • 关注75
  • 社区明星
阅读:7647回复:0

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

楼主#
更多 发布于:2013-01-29 11:45

状态寄存器是用来标识协处理器中指令执行情况的,它相当于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作为操作数。

喜欢0 评分0
游客

返回顶部