Linux内核完全剖析状态与控制寄存器_Linux内核完全剖析状态与控制寄存器试读-查字典图书网
查字典图书网
当前位置: 查字典 > 图书网 > 编程 > Linux内核完全剖析 > 状态与控制寄存器

Linux内核完全剖析——状态与控制寄存器

    三个16位的寄存器(TAG字、控制字和状态字)控制着浮点指令的操作并且为其提供状态信息。它们的具体格式如图11-6所示。下面逐一对它们进行说明。     (1)控制字     控制字(Control Word)可用于程序设置各种处理选项来控制80387的操作。其中可分为三个部分。位11~10的RC(Rounding Control)是舍入控制字段,用于对计算结果进行舍入操作。位9~8的PC(Precision Control)是精度控制字段,用于在保存到指定存储单元之前对计算结果进行精度调整。所有其他操作使用临时实数格式精度,或者使用指令指定的精度。位5~0是异常屏蔽位,用于控制协处理器异常处理。这6位对应80387可能发生的6种异常情况。其中每一种异常都可以单独屏蔽掉。如果发生某个特定异常并且其对应屏蔽位没有置位,那么80387就会向CPU通报这个异常,并且会让CPU产生异常中断int 16。然而如果设置了对应屏蔽位,那么80387就会自己处理并纠正发生的异常问题而不会通知CPU。这个寄存器随时可以读写,其中各位的具体含义参见图11-6。     (2)状态字     在运行期间,80387会设置状态字(Status Word)中的位,用于程序检测特定的条件。当发生异常时,它可让CPU确定发生异常的原因。因为所有6个协处理器异常都会让CPU产生异常中断int16。     (3)特征字     特征字(Tag Word)寄存器含有8个2位的Tag字段,分别对应8个物理浮点数据寄存器。这些特征字段分别指明相应的物理寄存器含有有效、零、特殊浮点数值,或者是空的。特殊数值是指那些无限值、非数值、非规格化或不支持格式的数值。特征字段Tag可用于检测累加器堆栈上下溢出情况。如果入栈(Push)操作递减TOP指向了一个非空寄存器,就会发生栈上溢出。如果出栈(Pop)操作企图去读取或弹出空寄存器,就会造成栈下溢出(Underflow)。栈的上下溢出都将引发无效操作异常。     图11-6  控制和状态寄存器格式

展开全文

推荐文章

猜你喜欢

附近的人在看

推荐阅读

拓展阅读

《Linux内核完全剖析》其他试读目录

• 序
• 数学协处理器
• 浮点数据类型
• 特殊实数
• 数学协处理器功能和结构
• 栈式浮点累加器
• 状态与控制寄存器 [当前]
• 出错指针寄存器
• math_emulate.c程序