EFLAGES寄存器中的系统标志
TF 陷阱(第8位):置1则开启单步执行调试模式,置0则关闭单步执行.在单步执行模式下,
处理器在每条指令后产生一个调试异常,这样在每条指令执行后都可以查看执行程序
的状态.如果程序用POPF,POPFD或者IRET指令设置TF标志,那么这之后的第一条指令
就会产生调试异常.
IF 中断许可(第9位):控制处理器对可屏蔽硬件中断请求的响应.置1则开启可屏蔽硬件
中断响应,置0则关闭可屏蔽硬件中断响应.IF标志不影响异常和不可屏蔽中断(NMI)
的产生.CPL,IOPL和控制寄存器CR4中的VME标志决定着IF标志是否可由CLI,STI,POPF,
POPFD和IRET指令修改.
IOPL I/O特权域(第12,13位):标示当前进程或任务的I/O特权级别.当前进程或任务的CPL必须
小于或等于IOPL才可以访问I/O地址空间.只有CPL为0的进程才可以用POPF或IRET指令
修改这个域.IOPL是控制IF标志修改的机制之一,同时也是当虚拟模式扩展生效时(控制
寄存器CR4中的VME置位),控制虚拟8086模式下中断处理机制之一.
NT 嵌套任务(第14位):控制被中断和被调用的任务的嵌套执行链.处理器调用一个由CALL
指令,中断或者异常触发的任务时设置该位,调用IRET指令返回时检测并修改该位.
该标志可以由POPF/POPFD指令直接置位或置0,然而在应用程序中修改该标志的状态会
产生不可预料的异常.
RF 恢复(第16位):控制处理器对指令断点的响应.置1则暂时禁用指令断点产生调试异常(#DE),
但是其它异常情况仍可以产生异常.置0则指令断点产生调试异常.
RF标志的主要功能是许可从调试异常(指令断点引发的)后面的那个指令开始继续执行.
调试软件必须在用IRETD指令返回到被中断程序之前,将栈中的EFLAGS映象中的该位置为1,
以阻止指令断点产生另外的调试异常.在返回并成功执行断点指令之后,处理器会自动清零
该位,从而许可继续产生指令断点故障.
VM 虚拟8086模式(第17位):置1则进入虚拟8086模式,置0则返回保护模式.
AC 对齐检查(第18位):置位该标志和控制寄存器CR0的AM标志则启用对内存引用的对齐检查,
清除这两个标志则禁用对齐检查.当引用一个没有对齐的操作数时,将会产生一个对齐检查
异常,比如在奇地址引用一个字地址或在不是4的倍数的地址引用一个双字地址.对齐检查
异常只在用户态(3级特权)下产生.默认特权为0的内存引用,比如段描述符表的装载,并不
产生这个异常,尽管同样的操作在用户态会产生异常.
对齐检查异常用于检查数据的对齐,当处理器之间交换数据时这很有用,交换数据需要所有的
数据对齐.对齐检查异常也可供解释程序使用.让某些指针不对齐就好比做上特殊标记,这样就
无需对每个指针都进行检查,只在用到的时候,对这些特殊指针进行处理就可以了(一旦用到
这些特殊指针,因为不对齐,系统就会产生对齐异常,这样就可以在对齐异常处理程序中放置
相应的处理方法).
VIF 虚拟中断(第19位):是IF标志的一个虚拟映象.这个标志是和VIP标志一起使用的.当控制寄
存器CR4中的VME或者PVI标志置为1且IOPL小于3时,处理器只识别VIF标志(VME标志用来启用
虚拟8086模式扩展,PVI标志启用保护模式下的虚拟中断).
VIP 虚拟中断等待(pending)(第20位):置1表明有一个正在等待处理的中断,置0表明没有等待处理
的中断.该标志和VIF一起使用.处理器读取该标志但从来不修改它.当VME标志或者控制寄存器
CR4中的PVI标志置1且IOPL小于3时,处理器只识别VIP标志.(VME标志启用虚拟8086模式扩展,
PVI标志启用保护模式虚拟中断).
ID 识别(第21位):置1或0表明是否支持CPUID指令.
摘自:IA-32卷3:系统编程指南