8085微处理器中的标志寄存器
在8085微处理器中,标志寄存器可以有总共八个标志。因此,一个标志可以由1位信息表示。但是在8085中只实现了五个标志,它们是:
- 进位标志(Cy),
-
辅助进位标志(AC),
-
符号标志(S),
-
奇偶标志(P),以及
-
零标志(Z)。
这些标志位在标志寄存器中的相应位置如下图所示。在标记为 “x” 的位置上,应该被视为标志寄存器中的”don’t care”位。用户不需要记忆这些标志位在标志寄存器中的位置。
图中的标志寄存器
现在考虑8085的程序员视图,标志寄存器如下图所示-
图中的8085标志寄存器的程序员视图
这些单独的标志位在执行最后一条算术或逻辑指令后,根据结果要么设置为1,要么重置为0。但在一些算术和逻辑指令中,某些或没有这些标志位受到影响。此外,对于一些算术和逻辑指令,标志寄存器中的标志位也将不受影响。例如,在执行DCX和INX指令时,标志寄存器中的标志位将不会受到任何影响。
然而,在任何数据传输指令中,标志寄存器中的标志位均不受影响。现在让我们单独考虑每个标志位,以供进一步讨论。
进位标志(Cy): 在执行任意两个8位数的相加后,所产生的进位可以是0或1,即只有1位。因此,为了存储进位信息,1位存储空间就足够了。进位标志(Cy)存储在标志寄存器中的最低位位置。用户的程序中广泛使用了使用进位标志的指令。
示例1: 在45H和F3H的相加中,所产生的结果将为38H,并且Cy标志= 1,如下所示。
示例2: 在85H和1EH的相加中,所产生的结果将为A3H,而Cy = 0,如下所示。
辅助进位标志(Ac): 现在,让我们考虑任意两个8位(2个十六进制位)数的相加,在我们相加两个数的LS十六进制位时可能会产生进位。这样的进位称为中间进位,也称为半进位或辅助进位(AC)。Intel更喜欢称它为AC。在上述示例1中没有产生AC,但在示例2中产生了AC。
由于这只是一个中间结果,我们可能对存储这个比特信息不感兴趣。但是8085微处理器仍然在标志寄存器的第4位存储这个AC信息。DAA指令的执行结果受到这个标志的影响。然而,在我们的8085指令集中没有提供任何明确使用AC标志的指令。
符号标志(S): 当任何逻辑或算术操作产生的结果为负数时,S标志被设置为1,由8位结果的最高位(MS位)为1来表示。如果结果为正数,则通过8位结果的MS位为0来复位为0。
因此,S标志的值本质上是8位结果的MS位的值。在上面的示例1中,由于8位结果为38H = 0 011 1000,MSB中的0表示结果为正数,符号标志被复位为0。请注意,我们在此不考虑包括进位的9位结果以决定S标志的值。在示例2中,由于8位结果为A3H = 1 010 0011,MSB变为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标志的指令在用户程序中。