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
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すると、00000001
0が得られるため、パリティも得られます。
または、値、またははレジスタを、、254
またはに設定します。それをとANDすると、、したがって奇数パリティが得られます。11111110
B
7
00000111
00000001
1
次のようなものを使用することもできます。
ANA A
JPE par_even
ここで、Aは1ビットのカウントではなく値です。
ANAが必要になる理由は、アキュムレータの内容に基づいてパリティフラグが設定されていることを確認するためです。特定の操作のみがフラグを設定し、アキュムレータをそれ自体とAND演算すると、アキュムレータは変更されませんが、それに基づいてP、S、およびZフラグが設定されます。
偶数パリティとは、1 オクテットに偶数個のビットが設定されていることを意味します。このIntel 8085アーキテクチャの簡単な紹介によると:
フラグは 5 つの 1 ビット フラグを含む 8 ビット レジスタです。
- 符号 - 結果の最上位ビットが設定されている場合に設定します。
- ゼロ - 結果がゼロの場合に設定します。
- 補助桁上げ - 結果のビット 3 からビット 4 への桁上げがあった場合に設定されます。
-パリティ- パリティ (結果の設定ビット数) が偶数の場合に設定します。
- キャリー - 加算中にキャリーがあった場合、または減算/比較中にボローがあった場合に設定します。
パリティ フラグは、条件分岐で最も簡単にテストできます (ソースへのリンク) 。
JPE label; // Jump if parity is Even
JPO label; // or jump if parity is Odd
フラグは、単一の出力レジスタを処理するほとんどの算術および論理命令によって設定されます。反例は、結果を保存しないMOVとCMPです。レジスタペアを順番に変更する算術演算 ( INX、DEXなど) は、明確な結果を持ちません。