标志位寄存器详解
标志寄存器介绍
标志寄存器又称程序状态字(外语缩写:PSW、外语全称:Program Status Word)。
这是一个16位的存放条件标志、控制标志寄存器,主要用于反映处理器的状态和ALU运算结果的某些特征及控制指令的执行。
这类寄存器一般有三个作用:
- 存储相关指令的某些执行结果
- 用来为CPU执行相关指令提供行为依据
- 用来控制CPU的相关工作方式
不同位数标志寄存器模型
16位标志寄存器(FLAGS)结构如下:

32位标志寄存器(EFLAGS)结构如下:

各个状态标志简介
CF
当进行加(减)法运算时,若最高位向前有进(借)位,则CF=1,否则CF=0。
应当注意的是,减法的CF被规定为小数减大数(无符号数)就置为1,所以不应当考虑减法最终是否转化为补码加法的问题。
PF
当运算结果中低8位的“1”的个数为偶数时PF=1,为奇数时,PF=0。
AF
在加(减)法操作中,bit3向bit4有进位(借位)发生时,AF=1,否则AF=0。DAA和DAS指令测试这个标志位,以便在BCD加法或减法之后调整AL中的值。
1字节为8bit 对应为 bit7|bit6|bit5|bit4 bit3|bit2|bit1|bit0 前四个为高4位,后四个为低4位
简单来说,AF就是用来判断 中间进位没有。即8位二进制操作数 第四位有无进位给第五位
ZF
当运算结果为零时ZF=1,否则ZF=0。
SF
当运算结果的最高位为1时SF=1,否则SF=0。
TF
当追踪标志TF被置为1时,CPU进入单步执行方式。
IF
CPU外部的不可屏蔽中断所发出的中断请求,以及CPU内部产生的中断请求。具体规定如下:
当IF=1时,CPU可以响应CPU外部的可屏蔽中断发出的中断请求
当IF=0时,CPU不响应CPU外部的可屏蔽中断发出的中断请求
CPU的指令系统中也有专门的指令来改变标志位IF的值
DF
方向标志DF用来决定在串操作指令执行时有关指针寄存器发生调整的方向。在微机的指令系统中,还提供了专门的指令来改变标志位DF的值。
OF
当算术运算结果超出了带符号数的范围,即溢出时,OF=1,否则OF=0.
IOPL
I/O特权标志用两位二进制位来表示,也称为I/O特权级字段。该字段指定了要求执行I/O指令的特权级。如果当前的特权级别在数值上小于等于IOPL的值,那么,该I/O指令可执行,否则将发生一个保护异常。
NT
嵌套任务标志NT用来控制中断返回指令IRET的执行。具体规定如下:
当NT=0,用堆栈中保存的值恢复EFLAGS、CS和EIP,执行常规的中断返回操作;
当NT=1,通过任务转换实现中断返回。
RF
恢复标志RF用来控制是否接受调试故障。规定:RF=0时,表示“接受”调试故障,否则拒绝之。在成功执行完一条指令后,处理机把RF置为0,当接受到一个非调试故障时,处理机就把它置为1。
VM
如果该标志的值为1,则表示处理机处于虚拟的8086方式下的工作状态,否则,处理机处于一般保护方式下的工作状态
AC
该标志以及在CR0寄存器中的AM位置1时将允许内存引用的对齐检查,以上两个标志中至少有一个被清零则禁用对齐检查。
VIF
该标志是IF标志的虚拟镜像(Virtual image),与VIP标志结合起来使用。使用这个标志以及VIP标志,并设置CR4控制寄存器中的VME标志就可以允许虚拟模式扩展(virtual mode extensions)
VIP
该位置1以指示一个中断正在被挂起,当没有中断挂起时该位清零。【Software sets and clears this flag; the processor only reads it.】与VIF标志结合使用
ID
程序能够设置或清除这个标志指示了处理器对CPUID指令的支持。
参考链接

浙公网安备 33010602011771号