进位标志(CF,Carry Flag)
定义和用途:
主要用于反映无符号数运算结果是否产生进位或借位。在进行加法运算时,如果最高位(对于字节运算为第 7 位,字运算为第 15 位等)产生进位,则 CF = 1;在减法运算中,如果最高位产生借位,则 CF = 1,否则 CF = 0。判断场景示例:
例如,在 8 位无符号数加法运算中,计算 255(二进制为 11111111)加 1。
,结果超出了 8 位表示范围,最高位产生进位,此时 CF = 1。在减法运算中,如 1(二进制为 00000001)减 2(二进制为 00000010)。
,由于不够减,需要向高位借位,最高位产生借位,CF = 1。 零标志(ZF,Zero Flag)
定义和用途:
用于判断运算结果是否为零。当运算结果的所有位都为零时,ZF = 1;只要结果中有一位不为零,ZF = 0。判断场景示例:
对于加法运算,如计算 1 加( - 1)。
(这里以 8 位有符号数为例),结果为零,ZF = 1。对于乘法运算,如 2 乘以 0。
结果为 0,ZF = 1。 符号标志(SF,Sign Flag)
定义和用途:
用于反映有符号数运算结果的符号。对于有符号数运算,结果的最高位(对于字节运算为第 7 位,字运算为第 15 位等)为符号位。如果结果的符号位为 1,表示结果为负数,SF = 1;如果符号位为 0,表示结果为正数,SF = 0。判断场景示例:
在 8 位有符号数运算中,计算 - 1(二进制为 11111111)加 - 1。
,结果的最高位为 1,是负数,SF = 1。计算 1(二进制为 00000001)加 1。
,结果最高位为 0,是正数,SF = 0。 溢出标志(OF,Overflow Flag)
定义和用途:
用于判断有符号数运算结果是否溢出。溢出是指有符号数运算结果超出了该数据类型所能表示的范围。对于有符号数的加法运算,当两个操作数的符号相同,但结果的符号与操作数的符号不同时,OF = 1,表示溢出;对于减法运算,当两个操作数的符号不同,且结果的符号与被减数的符号不同时,OF = 1,否则 OF = 0。判断场景示例:
在 8 位有符号数加法运算中,计算 127(二进制为 01111111)加 1。
,两个操作数是正数,但结果为负数,产生溢出,OF = 1。在减法运算中,如 - 128(二进制为 10000000)减 1。
,被减数是负数,结果是正数,产生溢出,OF = 1。 辅助进位标志(AF,Auxiliary Carry Flag)
定义和用途:
主要用于 BCD(Binary - Coded Decimal)码运算。在进行加法或减法运算时,如果低 4 位向高 4 位产生进位或借位,则 AF = 1,否则 AF = 0。判断场景示例:
在 BCD 码加法运算中,例如计算 BCD 码表示的 9(二进制为 1001)加 7(二进制为 0111)。
,低 4 位向高 4 位产生进位,AF = 1。在 BCD 码减法运算中,如计算 BCD 码表示的 5(二进制为 0101)减 8(二进制为 1000)。
需要借位,低 4 位向高 4 位产生借位,AF = 1。