|
对于处理器种实现的每个操作,都必须有一种机制来确定是否成功 --- 处理器标志正是用于实现这个功能。
IA-32 平台使用单一的 32 位寄存器 (EFLAGS)中的各位表示所有处理器的标志,这些标志按照功能分组可有状态标志、控制标志和系统标志这三组。在 EFLAGS 寄存器中,还有一些位是保留供将来使用。
1、状态标志
状态标志用于表明处理器进行的数学操作结果。如下表所示:
标志
| 位
| 名称
| CF
| 0
| 进位标志
| PF
| 2
| 奇偶校验标志
| AF
| 4
| 辅助进位标志
| ZF
| 6
| 零标志
| SF
| 7
| 符号标志
| OF
| 11
| 溢出标志
|
如果无符号整数值的数学操作产生最高有效位的进位或者借位,进位标志就会被设置为 1。这表示数学操作中发生了寄存器溢出的情况。发生溢出时,寄存器中保存的数据不是数学操作的正确答案。
奇偶校验标志用于表明数学操作种的结果寄存器是否包含错误数据。作为简单的正确性检查,如果结果中为 1 的位的总数是偶数,那么奇偶校验位被设置为 1;如果结果中 1 的位的总数是奇数,那么它被清零。通过检查奇偶校验标志,应用程序可以确定寄存器的数据是否被操作破坏了。
辅助进位标志用于二进制编码的十进制( Binary Coded Decimal, BCD ) 数学操作中。如果用于运算的寄存器的第 3 位发生进位或者借位操作,辅助进位标志就被设置为 1 。
如果操作的结果为零,零标志就被设置为 1 。这经常用来判断数学操作结果是否为零的一个便捷途径。
符号标志位被设置为结果的最高有效位,这一位是符号位。它表明是正值还是负值。
当带符号整数运算的结果的正值过大,或者负值过小时,溢出标志用于正确地表示寄存器中的值。
2、控制标志
控制标志用于控制处理器种的特定行为。目前只定义了一个控制标志----DF 标志,即方向标志。它用于控制处理器处理字符串的方式。当 DF 标志被置 1 时,字符串指令自动递减内存地址以便到达字符串中的下一个字节。当 DF 标志被清零时,字符串指令自动递增内存地址以便到达字符串的下一个字节。
3、系统标志
系统标志用于控制操作系统级别的操作。应用程序绝不能试图修改系统标志。系统标志如下表所示:
标志
| 位
| 名称
| TF
| 8
| 陷阱标志
| IF
| 9
| 中断使能标志
| IOPL
| 12,13
| I/O特权级别标志
| NT
| 14
| 嵌套任务标志
| RF
| 16
| 恢复标志
| VM
| 17
| 虚拟8086模式标志
| AC
| 18
| 对准检查标志
| VIF
| 19
| 虚拟中断标志
| VIP
| 20
| 虚拟中断挂起标志
| ID
| 21
| 识别标志
|
陷阱标志被设置为 1 时,启用单步模式。在单步模式中,处理器每次只执行一条命令,然后等待执行下一条指令的信号。在调试汇编语言程序时这一特性极为有用。
中断使能标志控制处理器如何响应从外部源接收到的信号。
I/O 特权字段表明当前正在运行的任务的 I/O 特权级别。它定义 I/O 地址空间的访问级别。特权字段值必须小于或者等于访问 I/O 地址空间所必须的访问级别;否则,任何访问地址空间的请求都会被拒绝。
嵌套任务标志控制当前正在运行的任务是否链接到前一个执行的任务。他用于链接被中断和被调用的任务。
恢复标志控制处理器在调试模式中如何响应异常。
虚拟 8086 标志表明处理器在虚拟 8086 模式中进行操作,而不是保护模式或是实模式。
对准检查标志 (和 CR0 控制寄存器的 AM 位一起) 用于启用内存引用的对准检查。
当处理器在虚拟模式中进行操作时,虚拟中断标志起 IF 标志的作用。
当处理器在虚拟模式中进行操作时,虚拟中断挂起标志用于表示一个中断正在被挂起。
ID 标志有意思的地方是它表示处理器是否支持 CPUID 指令。如果处理器能够设置或者清零这个标志,那么它就支持 CPUID 指令。如果不能,则 CPUID 指令不可用。( CPUID 指令若成功执行后,会返回 CPU 的相关信息,如 Intel 的 CPU 就返回 GenuineIntel 这个标识) |
|