我对8051很新,正在测试它。在CJNE执行后,它将PSW设置为0x80。为什么这样做?下面是代码。我正在使用EdSim51DI模拟器。
非常感谢任何帮助
答案 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