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

標準TTLだけ(!)でCPUをつくろう!(組立てキットです!)
(ホントは74HC、CMOSなんだけど…)
やっと(!)MYCPU80の改良型基板製作に着手しました!!





[第856回]


●[12]ADD、SUB、CMP、DAD、DAA、RST、INT命令回路

とうとう、といいますか、やっと、といいますか、今回の作業でついに完成です。
残っておりました算術演算回路と割込処理回路を実装することで、全回路が実装できました。
完成写真です。


●ADD、ADC、SUB、SBB、CMP命令のテスト

ADDはAレジスタとAおよびそのほかのレジスタ、メモリとの加算命令です。
加算の結果はAレジスタに入れられます。
SUBはAレジスタからAおよびそのほかのレジスタ、メモリの値を減算して結果をAレジスタに入れる命令です。
ADCはADDの演算にC(キャリー)を加える加算命令です。
SBBはSUBの演算からさらにC(キャリーだがこの場合にはボロー)を減じる減算命令です。
CMPはSUBと同じ計算をしますが、Aレジスタの値は変わりません。
フラグだけが変わります。
Aレジスタとその他のレジスタ、メモリとの値の比較に使われます。
ADD、ADC、SUB、SBB、CMP命令のテストプログラムのリストです。

0000 21AB56  LXI H,$56AB
0003 118934  LXI D,$3489
0006 7D      MOV A,L
0007 83      ADD E
0008 4F      MOV C,A
0009 7C      MOV A,H
000A 8A      ADC D
000B 47      MOV B,A
000C 11CD12  LXI D,$12CD
000F 3E89    MVI A,89
0011 93      SUB E
0012 6F      MOV L,A
0013 3E34    MVI A,34
0015 9A      SBB D
0016 67      MOV H,A
0017 BC      CMP H
0018 C21D00  JNZ $001D
001B BD      CMP L
001C 76      HLT
001D 76      HLT

上記の命令のほかに、即値(定数)との間で演算をおこなうADI、ACI、SUI、SBI、CPI命令もありますが、ADD〜CMPと基本的な部分はすべて同じ回路を共有していますから、ここでのテストは省略します。
最初にAレジスタの値ABとEレジスタの値89が加算(ADD)され、結果の値34がCレジスタに入れられます。
このときキャリーが発生します。
そのキャリーとAレジスタの値56とDレジスタの値34とが加算(ADC)され、結果の値8BがBレジスタに入れられます。
次にAレジスタの値89からEレジスタの値CDが減算(SUB)され、結果の値BCがLレジスタに入れられます。
このときボローが発生します。
次にAレジスタの値34からDレジスタの値12とボローとが減算(SBB)され、結果の値21がHレジスタに入れられます。
そのあとAレジスタとHレジスタが比較(CMP)されます。
Aレジスタの値21がHレジスタに入れられた直後ですから、A=HでZフラグが1になります。
したがってその次のJNZはパスされて、その次のCMP命令が実行されます。
Aレジスタの値21とLレジスタの値BCが比較されます。CMP命令の比較はSUBと同じ計算をしますから、21−BCの計算になります。その結果キャリーフラグが立ちます。
最後にHLT命令が実行されます。
プログラムが正しく実行されれば、B=8B、C=34、A=21、H=21、L=BCになりC(キャリー)フラグがセットされたあと、アドレス001CのHLT命令で停止します。

ADD、ADC、SUB、SBB、CMP命令のテストプログラムを実行中の写真です。


このほかにもまだテストする命令が残っていますが、本日は時間がなくなってしまいましたので、それについては次回に書くことにします。

TTLでCPUをつくろう![第856回]

2018.3.2upload

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