標準TTLだけ(!)でCPUをつくろう!(組立てキットです!)
(ホントは74HC、CMOSなんだけど…)
[第212回]

●DAD命令の回路の説明です

DADは8080では唯一の16ビットの加算命令です。
8ビットのADD命令は、Aレジスタと、レジスタ、メモリ、定数値との加算を行いますが、DADはHLレジスタと、HL、DE、BC、SPの各16ビットレジスタとを加算し、結果をHLレジスタに入れます。
計算によって影響を受けるフラグはC(キャリー)フラグだけです。

DAD命令の命令コードは、00pp1001です。
ppには00〜11が入ります。HLと加算する相手のレジスタによって、ppの値が決められています。
pp=00はBCレジスタ、01はDEレジスタ、10はHLレジスタ、11はSPレジスタ(スタックポインタ)です。

ニーモニックとマシン語コードは下記のようになります。

ニーモニック   命令コード(2進数)  命令コード(16進数)   意味
DAD B       00001001       09           HL+BC→HL
DAD D       00011001       19           HL+DE→HL
DAD H       00101001       29           HL+HL→HL
DAD SP      00111001       39           HL+SP→HL

最後のDAD SPだけはちょっと変わっていますが、その他の3命令は、8ビットのADD命令を使って、同じ結果を得ることができます。
たとえば、DAD Bの代わりに、次のようにしても、同じ結果が得られます。

MOV A,L
ADD C
MOV L,A
MOV A,H
ADC B
MOV H,A

ただ、厳密に言うと全く同じではありません。
ADD、ADCを使うと、Aレジスタの値が変わってしまいます。それがまずい場合にはAレジスタを退避させておく必要があります。
また、DADはC(キャリー)フラグのみ変化しますが、ADD、ADCはそのほかのS(サイン)フラグやZ(ゼロ)フラグも変化してしまいます。

でも、それはそれとして、DAD命令の回路の考え方は、そこにあります。
つまり8ビットのADD命令を2回使うような回路を考えればよいのです。

本日は、時間がなくなってしまいました。
この続きは、また次回にいたします。
2009.4.24upload

前へ
次へ
ホームページトップへ戻る