第十一节:标志寄存器
cpu内部的寄存器中,有一种特殊的寄存器具有以下3种作用
a.用来存储相关指令的某些执行结果
b.用来为cpu执行相关指令提供行为依据
c.用来控制cpu的相关工作方式
这种特殊的寄存器在8086CPU中,被称为标志寄存器。
其中存储的信息通常称为程序状态字(PSW)。
标志寄存器(简称flag),不同于其他的寄存器(用来存放的,整个寄存器都具有一个含义)
flag寄存器是按位起作用的,每一位都有特定的含义,记录特定的信息;
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
* * * * OF DF IF TF SF ZF * AF * PF * CF
*表示在8086CPU上没有任何意义,其它对应的位都具有特殊含义。
1.ZF标志(第6位)-零标志位-Zero Flag
记录相关指令执行后,如果结果=0,zf=1;结果!=0,zf=0;
mov ax,1
sub ax,1/and ax,0
zf=1;
mov ax,2
sub ax,1/or ax,0
zf=0;
2.PF标志(第二位)-奇偶标志位-Parity Flag
记录相关指令执行后,其结果的所有bit位中1的个数是否为偶数。
如果1的个数为偶数,pf=1。如果为奇数,pf=0;
mov al,1
add al,10
执行后,结果为00001011B,3个1,pf=0
3.SF标志(第7位)-符号标志位-Sign Flag
记录相关指令执行后,其结果是否为负
如果结果为负,sf=1;如果非负,sf=0;
计算机中通常用补码表示有符号数据。一个数据可以看作有符号数,也可以看作无符号数。
SF标志就是CPU对有符号数运算结果的一种记录,记录数据的正负。
mov al,10000001B
add a1,l
结果为10000010B,sf=1,表示:如果指令进行的是有符号数运算,那么结果为负。
4.CF标志(第0位)-进位标志位-Carry Flag
在进行无符号数运算的时候,记录运算结果的最高有效位向更高位的进位值,或从更高位的借位值
mov al,98H
add al,al ;(al)=30H,cf=1,cf记录从最高有效位向更高位的借位
add al,al ;(al)=60H,cf=0;
5.OF标志(第11位)-溢出标志位-Overflow Flag
在进行有符号数运算的时候,结果超出了机器所能表示的范围称为溢出
mov al,0F0H ;F0H,为有符号数-16的补码
add al,088H