Flag-register
📄 返回目录页
标志寄存器,其中有许多标志位,供cpu修改与设置,记录cpu执行指令时的状态

其中灰色的部分为保留位
对于16位模式下的标志寄存器,前16位和EFLAG寄存器相同
对于64位模式下的标志寄存器,低32位均和EFLAG寄存器相同,高32位均为保留位
标志位
CF(Carry Flag)
位于寄存器的第0位,在进行无符号数运算时,它记录了运算结果的最高有效位向更高位的进位值,或从更高位的借位值
比如两个十六进制数0xFFFF和0xFFFF相加后,保存在十六进制ax寄存器里,ax无法保存这个进位值,为此,这个进位值会保存子CF位中。ax里的值位0xFFFF,CF位则为1
PF(Parity Flag)
位于寄存器的第2位,用途是记录指令执行后,其运算结果的所有位中1的个数是否为偶数
- 当PF位为1时,表示1的个数为偶数
- 当PF位为0时,表示1的个数为奇数
AF(Auxiliary Flag)
位于寄存器的第4位,为辅助进位标志位,如果第3位向第4位发生了进位,那么AF标志位为1
mov al, 0xF
add al, 1
此时AL寄存器为0x10,AF标志位为1。
ZF(Zero Flag)
位于寄存器的第6位,记录相关指令执行后是否为0,是为1,否为0
SF(Sign Flag)
位于寄存器的第7位,记录相关指令执行后是否为负数,是为1,否为0
SF标志位是CPU对有符号数运算结果的一种记录,用于记录数据的正负,即最高位是否为1
IF(Interrupt Enable Flag)
位于寄存器第8位,表示是否响应中断。
- 如果IF为1,那么会响应所有类型的中断
- 如果IF为0,那么只响应不可屏蔽中断
IF标志位的值可通过指令CLI设置为0,通过STI指令设置为1,这两个指令均没有操作数
DF(Direction Flag)
位于寄存器第9位,为方向标志位,默认值为0
- 为1时,存储器地址自动减少,串操作指令为自动减量指令。
- 为0时,存储器地址自动增加,串操作指令为自动增量指令。
可通过汇编指令CLD将DF标志位设置为0,也可通过STD将DF设置为1。
串操作指令包含MOVSB,MOVSW,MOVSD。
OF(Overflow Flag)
位于寄存器的第9位,为溢出标志位。如果计算后发生了溢出,那么OF标志位会设置为1。