我是8051的新手,正在測試它。 CJNE執行後,它將PSW設置爲0x80。它爲什麼這樣做?以下是代碼。我正在使用EdSim51DI模擬器。8051 - CJNE之後PSW被設置爲0X80
任何幫助將大大理解
我是8051的新手,正在測試它。 CJNE執行後,它將PSW設置爲0x80。它爲什麼這樣做?以下是代碼。我正在使用EdSim51DI模擬器。8051 - CJNE之後PSW被設置爲0X80
任何幫助將大大理解
的PSW被設置爲0x80,因爲你的第一個操作數指令CJNE小於第二個操作數。繼續閱讀以更好地理解原因。
程序狀態字(PSW)包含反映當前CPU狀態的狀態位。 PSW中最重要的位(位7)是進位位(C)。
操作:CJNE
功能:比較和跳轉如果不相等
語法:CJNE操作數,操作數,reladdr
的CJNE指令比較的操作數和操作數值和如果不相等,則分支到指定的相對地址。如果兩個操作數相等,程序流將繼續執行CJNE指令之後的指令。該指令也影響PSW中的進位標誌。如果操作數1小於操作數2,則進位位(C)置1,否則將清零。此功能允許您使用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
非常感謝您的詳細解釋! – tray
那麼,有沒有跳呢? –