我对 8051 还很陌生,并且正在对其进行测试。CJNE 执行后,将 PSW 设置为 0x80。为什么这样做?下面是代码。我正在使用 EdSim51DI 模拟器。
任何帮助将不胜感激
我对 8051 还很陌生,并且正在对其进行测试。CJNE 执行后,将 PSW 设置为 0x80。为什么这样做?下面是代码。我正在使用 EdSim51DI 模拟器。
任何帮助将不胜感激
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