8085 微处理器中的标志寄存器
在 8085 微处理器中,标志寄存器可以包含总共八个标志。因此,一个标志可以用 1 位信息来表示。但 8085 中只实现了五个标志。它们是
进位标志 (Cy),
辅助进位标志 (AC),
符号标志 (S),
奇偶标志 (P),以及
零标志 (Z)。
这些标志位在标志寄存器中的相应位置已在下图中显示。标记为“x”的位置在标志寄存器中应视为“无关位”。用户不需要记住这些标志在标志寄存器中的位置。
图:标志寄存器
现在考虑 8085 程序员的视角,其中包含的标志寄存器在下图中进行了描述 -
图:8085 标志寄存器的程序员视角
这些单独的标志根据最后执行的算术或逻辑指令的结果,要么设置为 1,要么复位为 0。但在一些算术和逻辑指令中,这些标志中的一些或全部都不会受到影响。还有一些算术和逻辑指令,标志寄存器中的标志位也不会受到影响。例如,在执行 DCX 和 INX 指令时,标志寄存器中的标志位根本不会受到影响。
但是,在任何数据传输指令中,标志寄存器中的任何标志位都不会受到影响。现在让我们分别考虑每个标志位,以便我们进一步讨论。
进位标志 (Cy):在执行任何两个 8 位数的加法后,生成的进位可以是 0 或 1。即只有 1 位。因此,要存储进位信息,1 位存储就足够了。Cy 标志存储在标志寄存器中的最低有效位位置。使用 Cy 标志的指令在用户程序中被广泛使用。
示例 1:在 45H 和 F3H 的加法中,产生的结果将是 38H,并且 Cy 标志 = 1,如下所示。
示例 2:在 85H 和 1EH 的加法中,产生的结果将是 A3H,并且 Cy = 0,如下所示。
辅助进位标志 (Ac):现在让我们考虑任何两个 8 位(2 个十六进制数字)数的加法,当我们添加这两个数的最低有效位十六进制数字时,可能会生成进位。这种进位也称为中间进位,也称为半进位或辅助进位 (AC)。英特尔更喜欢称之为 AC。在上面的示例 1 中,没有生成 AC,但在示例 2 中,生成了 AC。
由于这只是一个中间进位,我们可能不希望存储此位信息。但 8085 微处理器仍然将此 AC 信息存储在标志寄存器中的第 4 位。DAA 指令执行的结果受此标志状态的影响。但是,在我们的 8085 指令集中,没有提供任何明确使用 AC 标志的指令。
符号标志 (S):当针对任何逻辑或算术运算产生的结果为负数时,S 标志设置为 1,由 8 位结果的最高有效位为 1 表示。否则,如果结果为正数,则将其复位为 0,由 8 位结果的最高有效位为 0 表示。
因此,S 标志的值本质上是 8 位结果的最高有效位的值。在上面的示例 1 中,由于 8 位结果是 38H = 0 011 1000,最高有效位为 0 表示结果为正,符号标志被复位为 0。请注意,我们这里不考虑包括进位的 9 位结果来确定 S 标志的值。在示例 2 中,由于 8 位结果是 A3H = 1 010 0011,最高有效位已变为 1,这意味着负数,符号标志被设置为 1。
但是,当我们使用无符号数时,我们将简单地忽略 S 标志。例如,如果我们将 85H 和 1EH 视为无符号数,它们的和将是无符号数 A3H。在这种情况下,S 标志变为 1,但我们不关心 S 标志的值。我们也将忽略它。
使用 S 标志的指令在用户程序中经常使用。
奇偶标志 (P):如果针对任何逻辑和算术运算产生的 8 位结果中包含偶数个 1,则 P 标志设置为 1。如果 8 位结果中包含奇数个 1,则 P 标志被复位为 0。
在我们之前的示例 1 中,由于 8 位结果 38H = 0011 1000 包含三个 1,因此包含奇数个 1,奇偶标志被复位为 0。另一方面,在示例 2 中,由于 8 位结果 A3H = 1010 0011 包含四个 1(因此为偶数个 1),奇偶标志被设置为 1。
由于用户实际上并不关心算术运算后结果中存在的 1 的数量,因此在实践中,此标志没有多大用处。
零标志 (Z):如果在算术和逻辑运算后,产生的 8 位结果为 00H,则 Z 标志设置为 1。如果 8 位结果不等于 00H,则 Z 标志被复位为 0。因此,Z 标志被设置以指示结果为 0。
在前面的示例 1 中,由于 8 位结果是 38H 且不为零,因此 Z 标志被复位为 0。同样,在另一方面,在示例 2 中,由于 8 位结果是 A3H,因此 Z 标志在此处再次被复位为 0。使用 Z 标志的指令在用户程序中被广泛使用。