標準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
前へ
次へ
ホームページトップへ戻る