CF: 进位标志位。在无符号运算时,记录了运算结果的最高有效位向更高位的进位值或从更高位借位,产生进位或借位时 CF=1,否则 CF=0;

PF: 奇偶标志位。相关指令执行后结果所有 bit 中 1 的个数为偶数,那么 PF=1,1 的个数为奇数则 PF=0;

AF: 辅助进位标志位。运算过程中看最后四位,不论长度为多少。最后四位向前有进位或者借位,AF=1, 否则 AF=0;

ZF: 零标志位。相关指令执行后结果为 0 那么 ZF=1, 结果不为 0 则 ZF=0;

SF: 符号标志位。相关指令执行后结果为负那么 SF=1,结果非负数则 SF=0;

TF: 调试标志位。当 TF=1 时,处理器每次只执行一条指令,即单步执行;

IF: 中断允许标志位。它用来控制 8086 是否允许接收外部中断请求。若 IF=1,8086 能响应外部中断,反之则屏蔽外部中断;

DF: 方向标志位。在串处理指令中,每次操作后,如果 DF=0,si、di 递增,如果 DF=1,si、di 递减;注意此处 DF 的值是由程序员进行设定的 cld 命令是将 DF 设置为 0,std 命令是将 DF 设置为 1;

OF: 溢出标志位。记录了有符号运算的结果是否发生了溢出,如果发生溢出 OF=1, 如果没有 OF=0;

异号数相加,必然不溢出,OF=0;同号有符号数相加,若结果与它们符号不同,则 OF=1,否则 OF=0

根据异或结果讨论,可能的情况只能有 10 和 01,对于 10 的情况最高位只能是 110 相加,那么就是两个负数相加结果为正数;对于 01 的情况最高位只能是 001 相加,相加结果最高位一定是 1,那就是两个正数变成负数了,也就是溢出


sub 和 subu 影响的只有标志位,其余运算结果是等价的