标志寄存器:
CPU内部的寄存器,(对于不同的处理机,个数和结构都可能不同)具有三种作用:
- 用来存储相关指令的某些执行结果;
- 用来为CPU执行相关指令提供行为依据;
- 用来控制CPU的相关工作方式。
8086CPU的标志寄存器有
16位,其中
存储的信息通常被称为
程序状态字PSW(标志位),简称flag。flag和其他寄存器不一样,其他寄存器是用来存放数据的,都是整个寄存器具有一个含义。
flag的1,3,5,12,13,14,15位在8086CPU中没有使用,不具有任何含义,而其余位具有特殊的含义。
运算结果标志位:
ZF标志(ZeroFlag):
零位标志位,它记录相关指令执行后的结果是否为0,如果是0,那么ZF=1,如果结果不为0,那么ZF=0。
PF标志(ParityFlag):
奇偶标志位,它记录相关指令执行后,其结果的所有二进制位中1个个数是否为偶数,如果是偶数,PF=1,反之为0。
SF标志(SignFlag):
符号标志位,它记录相关指令执行后,其结果是否为负,如果结果为负,SF=1,如果非负,SF=0。
CF标志(Carry进位,Flag标志):
进位标志位,一般情况,进行无符号运算时,它记录运算结果的最高位向更高位的进位值,或从更高位的借位值,如果运算结果的最高位产生了一个进位或借位,那么其值为1,否则其值为0。
OF标志(Overflow溢出,Flag标志):
溢出标志位,在进行有符号数运算的时候,如果结果超出了机器所能表示的范围称为溢出,OF的值被置为1,否则OF的值为0。
注意:这里所说的溢出,只是对有符号运算而言。
状态控制标志位:
TF标志(TrapFlag):
追踪标志位,当追踪标志被置为1时,CPU进入单步执行方式,即每执行一条指令产生一个单步中断请求,这中方式主要用于程序的调试。
IF标志(Interrupt-enable Flag):
中断允许标志位,
用来决定CPU是否响应CPU外部的可屏蔽中断发出的中断请求,但不管该标志为何值,CPU都必须响应CPU外部的不可屏蔽中断所发出的中断请求,以及CPU内部产生的中断请求。
- 当IF=1时,CPU可以相应CPU外部的可屏蔽中断发出的中断请求。
- 当IF=0时,CPU不响应CPU外部的可屏蔽中断发出的中断请求。
CPU的指令系统中也有专门的指令来改变标志位IF的值。
参考资料: