0

1 の数をカウントして reg B に保存する次のコードがあります。パリティが偶数か奇数かを確認するには、コードを変更する必要があります...

LXI H, var1
MVI B, 00H
MVI D, 00H
MVI C, 08H
MOV A, M

LOOP: RAR
JNC SKIP
INR B
SKIP: DCR C
JNZ LOOP

HLT

var1: db 72
4

2 に答える 2

4

B入力に設定されたビット数を保持する場合:値をビット単位でAND登録Bします1。結果が1、の場合、それは奇数パリティです。結果が0、の場合、それは偶数パリティです。これは0、偶数は常に最下位ビットを持ち、奇数は常にを持っているため1です。

8080クラスのアセンブリの非常に漠然とした記憶にアクセスしますが、それは次のようなものになると思います。

          MOV      A, B
          ANI      01H
          JZ       par_even
par_odd   ; parity is odd here, work your magic
          JMP      par_done

par_even  ; parity is even here, work other magic

par_done  ; carry on processing here

たとえば、72使用している値は、64 + 8またはバイナリ01001000です。

したがって、ビットカウントコードが正しく機能すると仮定すると、レジスタBは2、またはに設定され00000010ます。これをANDすると、000000010が得られるため、パリティも得られます。

または、値、またははレジスタを、、254またはに設定します。それをとANDすると、、したがって奇数パリティが得られます。11111110B700000111000000011

次のようなものを使用することもできます。

ANA    A
JPE    par_even

ここで、Aは1ビットのカウントではなく値です。

ANAが必要になる理由は、アキュムレータの内容に基づいてパリティフラグが設定されていることを確認するためです。特定の操作のみがフラグを設定し、アキュムレータをそれ自体とAND演算すると、アキュムレータは変更されませんが、それに基づいてP、S、およびZフラグが設定されます。

于 2013-03-17T03:00:51.790 に答える
3

偶数パリティとは、1 オクテットに偶数個のビットが設定されていることを意味します。このIntel 8085アーキテクチャの簡単な紹介によると:

フラグは 5 つの 1 ビット フラグを含む 8 ビット レジスタです。
- 符号 - 結果の最上位ビットが設定されている場合に設定します。
- ゼロ - 結果がゼロの場合に設定します。
- 補助桁上げ - 結果のビット 3 からビット 4 への桁上げがあった場合に設定されます。
-パリティ- パリティ (結果の設定ビット数) が偶数の場合に設定します。
- キャリー - 加算中にキャリーがあった場合、または減算/比較中にボローがあった場合に設定します。

パリティ フラグは、条件分岐で最も簡単にテストできます (ソースへのリンク) 。

JPE label;   // Jump if parity is Even 
JPO label;   // or jump if parity is Odd

フラグは、単一の出力レジスタを処理するほとんどの算術および論理命令によって設定されます。反例は、結果を保存しないMOVCMPです。レジスタペアを順番に変更する算術演算 ( INXDEXなど) は、明確な結果を持ちません。

于 2013-03-17T07:35:13.650 に答える