0x2、标志寄存器之状态寄存器

时间:2024-04-01 13:08:46

CPU内部的寄存器中,有些特殊的寄存器有一下三种作用:
1、用来存储相关指令的某些结果
2、用来为CPU执行相关指令提供行为依据
3、用来控制CPU的工作方式
这种寄存器被称为标志寄存器FLAG
8086CPU中标志寄存器是16位的。

0x2、标志寄存器之状态寄存器

0x1、ZF标志(Zero Flag)

ZF标志是FLAG寄存器的第六位。零标志位
他记录指令执行后,其结果是否为0。
如果结果为0,ZF= 1
如果结果不为0,ZF= 0

例如:mov ax,1
sub ax,1
执行后ax的值为0,则ZF = 1

0x2、标志寄存器之状态寄存器

0x2、PF标志(Parity Flag)

FLAG寄存器的第二位。(奇偶标志位)
记录相关指令执行后,其结果中的二进制位中1的个数是否为偶数。
如果为偶数则,PF = 1
如果为奇数则,PF = 0

例如:
mov al,0x1
add al,0x10
al = 0x11
0001 0001
1的个数为偶数
所以PF = 1

0x2、标志寄存器之状态寄存器

0x3、SF标志(Sign Flag)

EFLG寄存器的第7位,符号标志位。
它记录相关指令执行后,其结果是否为负数。
如果结果为负数,SF = 1
如果结果不为负数 SF = 0

例如:
MOV AX,0x7FFF
ADD AX,0x1
AX = 0x8000 = -128

0x2、标志寄存器之状态寄存器

0x4、CF标志(Carry Flag)

FLAG的第0位,进位标志位。
一般情况下,在进行无符号数运算的时候,他记录了运算结果的最高有效位向更高位进位或借位的值。
如果向最高有效位借位或者进位,CF = 1
如果没有向最高有效位进位或者借位 CF = 0
例如:
MOV AX,0xFFFF
ADD AX,0x1
AX = 0x1 0000 0000
向最高位进位
所以CF = 1

0x2、标志寄存器之状态寄存器

0x5、OF标志(Overflow Flag)

什么是溢出呢?
在进行有符号运算的时候,如果超出了极其所能标识的最大范围则为溢出
机器所能表示的最大范围
例如:8位寄存器,所能表示的最大范围为 -128 ~ 127之间
MOV AL,0x7F 127
ADD AL, 0x1
AL = 127 + 1有符号的超过了正数的最大范围
所以OF = 1

0x2、标志寄存器之状态寄存器