2

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

任何帮助将不胜感激

4

1 回答 1

2

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


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

操作:CJNE
功能:比较,如果不相等则跳转
语法:CJNE 操作数 1,操作数 2,reladdr

CJNE 指令比较操作数 1 和操作数 2 的值,如果它们相等,则跳转到指定的相对地址。如果两个操作数相等,则程序流继续执行 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
于 2012-12-12T15:12:34.497 回答