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

11.2.2 存取状态寄存器

对于协处理器中状态寄存器的内容,程序员可用指令FSTSW把其值送到内存单元中。如果当前使用的是80287及其以后的协处理器,那么,可用指令“FSTSW AX”把该状态寄存器的值传送给通用寄存器AX。一旦状态寄存器的值复制到内存或AX中,那么,就可对其各位进行分析,并可检测出当前协处理器的工作状态。

对于80287协处理器,它还可通过I/O地址00FAH~00FFH来实现其与CPU之间的数据交换,而80387~Pentium系列芯片,则是通过I/O地址800000FAH~800000FFH来实现这两者之间的数据交换。

当状态寄存器的内容传给AX之后,一般可用下面二种方法来检测协处理器的状态。

方法1:用TEST指令来检测其相应的状态位。

例11.3 检测是否有“0作除数”的错误。 

FDIV   DATA1 ;用协处理器中堆顶数据去除DATA1
FSTSW AX   ;把状态寄存器的值传送给AX
TEST AX, 4  ;测试第2位,即:检测ZE是否为1
JNZDIV_ERR

例11.4 检测是否有“非法操作数”的错误。 

FSQRT;求协处理器中堆顶数据的平方根
FSTSWAX
TESTAX, 1;测试第0位,即:检测IE是否为1
JNZSQRT_ERR

方法2:用SAHF指令把AX的低字节传送给CPU的标志位寄存器,然后再用条件转移指令来完成相应的检测。 

例11.5检测内存单元的数据与协处理器堆顶数据之间的大小关系。 

FCOMDATA1;内存单元DATA1的值与协处理器堆顶数据进行比较
FSTSWAX
SAHF;把AX的低字节存入CPU的状态寄存器
JEST_EQUAL ;具体大小关系的决定可见表11.2中的“FCOM”
JBST_BELOW
JAST_ABOVE

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

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

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