2

私は8051にかなり慣れていないので、テストしていました。CJNEの実行後、PSWを0x80に設定します。なぜそれをするのですか?以下はコードです。EdSim51DIシミュレーターを使用しています。

どんな助けでも大歓迎です

4

1 に答える 1

2

CJNE命令の最初のオペランドが2番目のオペランドよりも小さいため、PSWは0x80に設定されます。理由をよりよく理解するために読んでください。


プログラムステータスワード(PSW)には、現在のCPU状態を反映するステータスビットが含まれています。PSWの最上位ビット(ビット7)は、キャリービット(C)です。

操作:CJNE
機能:等しくない場合は比較してジャンプ
構文:CJNEoperand1、operand2、reladdr

CJNE命令は、operand1operand2の値を比較し、それらが等しくない場合は、示された相対アドレスに分岐します。2つのオペランドが等しい場合、プログラムフローはCJNE命令に続く命令から続行されます。この命令は、PSWのキャリーフラグにも影響します。キャリービット(C)は、operand1がoperand2より小さい場合にセットされ、そうでない場合はクリアされます。この機能を使用すると、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 に答える