私は8051にかなり慣れていないので、テストしていました。CJNEの実行後、PSWを0x80に設定します。なぜそれをするのですか?以下はコードです。EdSim51DIシミュレーターを使用しています。
どんな助けでも大歓迎です
私は8051にかなり慣れていないので、テストしていました。CJNEの実行後、PSWを0x80に設定します。なぜそれをするのですか?以下はコードです。EdSim51DIシミュレーターを使用しています。
どんな助けでも大歓迎です
CJNE命令の最初のオペランドが2番目のオペランドよりも小さいため、PSWは0x80に設定されます。理由をよりよく理解するために読んでください。
プログラムステータスワード(PSW)には、現在のCPU状態を反映するステータスビットが含まれています。PSWの最上位ビット(ビット7)は、キャリービット(C)です。
操作:CJNE
機能:等しくない場合は比較してジャンプ
構文:CJNEoperand1、operand2、reladdr
CJNE命令は、operand1とoperand2の値を比較し、それらが等しくない場合は、示された相対アドレスに分岐します。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