8051 - 在CJNE之后PSW被设置为0X80

时间:2012-12-10 06:57:39

标签: 8051

我对8051很新,正在测试它。在CJNE执行后,它将PSW设置为0x80。为什么这样做?下面是代码。我正在使用EdSim51DI模拟器。

非常感谢任何帮助

1 个答案:

答案 0 :(得分:2)

PSW设置为0x80,因为CJNE指令的第一个操作数小于第二个操作数。继续阅读以更好地理解原因。


程序状态字(PSW)包含反映当前CPU状态的状态位。 PSW中最高有效位(第7位)是进位(C)。

  

操作:CJNE
  功能:比较和跳转如果不相等
  语法:CJNE operand1,operand2,reladdr

CJNE指令比较 operand1 operand2 的值,如果它们不相等则分支到指示的相对地址。如果两个操作数相等,则程序流程继续执行CJNE指令之后的指令。该指令还会影响PSW中的进位标志。如果操作数1 小于操作数2 ,则进位(C)置位,否则清零。此功能允许您使用CJNE指令执行大于/小于测试以用于决策目的,如下例所示。


; The following code sample checks if the value in A is equal to, less
; than, or greater than 0x55.  The NOP instructions can be replaced
; with code to handle each condition as desired.

            CJNE   A, #55h, CHK_LESS   ; If A is not 0x55, check 
            LJMP   EQUAL               ; A is 0x55, so jump to EQUAL code
CHK_LESS:   JC     IS_LESS             ; If carry is set, A is less than 0x55

IS_GREATER: NOP                        ; A is greater than 0x55
            LJMP   DONE

IS_LESS:    NOP                        ; A is less than 0x55
            LJMP   DONE

EQUAL:      NOP                        ; A is equal to 0x55

DONE:       NOP                        ; Done with the comparison