2012-12-10 110 views
2

我是8051的新手,正在測試它。 CJNE執行後,它將PSW設置爲0x80。它爲什麼這樣做?以下是代碼。我正在使用EdSim51DI模擬器。8051 - CJNE之後PSW被設置爲0X80

任何幫助將大大理解

+0

那麼,有沒有跳呢? –

回答

2

的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 
+0

非常感謝您的詳細解釋! – tray