標準TTLだけ(!)でCPUをつくろう!(組立てキットです!)
(ホントは74HC、CMOSなんだけど…)
[第330回]
●[6]INR/DCR命令回路の実装です
[第311回]で説明した作業です。
今回はINR/DCR命令の回路を実装します。
実装する部分は、こちらのシルク図で、青色で着色したところです。
●組立作業を終わったところの写真です
INR/DCR命令の回路は、テストプログラムを実行して、正しく動作することを確認いたしました。
そのあたりについては、また「操作説明書」を引用する形でご紹介するつもりだったのですが、本日、まだ操作説明書のその部分が仕上がりませんでした。
INR/DCR命令回路のテストについては、次回に説明することにいたします。
実際の組立作業よりも、「組立説明書」の作成作業の方がうんと手間がかかります。
そして「組立説明書」の作成作業よりも「操作説明書」の作成作業の方がもっと、もっと、もっと時間がかかってしまいます。
8080命令説明書が先行していますので、本日はそちらを紹介することにいたします。
[第327回]の続きです。
●8080命令説明書(2)
●[3] 16ビット転送命令(この命令群もフラグに影響を与えません)
12. LXI B,B3B2 コード 01×××× クロック8(10)
16ビットのデータB2B3をペアレジスタBCに転送します。
B2B3については 8.LDA B3B2 の説明を参照してください。
13. LXI D,B3B2 コード 11×××× クロック8(10)
16ビットのデータB2B3をペアレジスタDEに転送します。
B2B3については 8.LDA B3B2 の説明を参照してください。
14. LXI H,B3B2 コード 21×××× クロック8(10)
16ビットのデータB2B3をペアレジスタHLに転送します。
B2B3については 8.LDA B3B2 の説明を参照してください。
15. LXI SP,B3B2 コード 31×××× クロック8(10)
16ビットのデータB2B3をSP(スタックポインタ)に転送します。
B2B3については 8.LDA B3B2 の説明を参照してください。
16.LHLD B3B2 コード 2A×××× クロック20(16)
B2B3で示されるメモリの内容をLに、B2B3+1番地のメモリの内容をHに転送します。
B2B3については 8.LDA B3B2 の説明を参照してください。
17. SHLD B3B2 コード 22×××× クロック20(16)
Lの内容をB2B3で示されるメモリへ、Hの内容をB2B3+1番地のメモリへ転送します。
B2B3については 8.LDA B3B2 の説明を参照してください。
18. SPHL コード F9 クロック8(5)
HLの内容をSPに転送します。
19. PUSH B コード C5 クロック8(11)
ペアレジスタBCの内容をSPで示されるプッシュダウンスタックへ転送します。(SP−1)←B,(SP−2)←C
20. PUSH D コード D5 クロック8(11)
DEの内容をスタックに転送します。(SP−1)←D,(SP−2)←E
21. PUSH H コード E5 クロック8(11)
HLの内容をスタックに転送します。(SP−1)←H,(SP−2)←L
22. PUSH PSW コード F5 クロック8(11)
アキュムレータAとフラグレジスタFの内容をスタックに転送します。(SP−1)←A,(SP−2)←F
23. POP B コード C1 クロック8(10)
スタックのトップにあるデータがBCに転送されます。C←(SP)、B←(SP+1)
24. POP D コード D1 クロック8(10)
スタックのトップにあるデータがDEに転送されます。E←(SP)、D←(SP+1)
25. POP H コード E1 クロック8(10)
スタックのトップにあるデータがHLに転送されます。L←(SP)、H←(SP+1)
26. POP PSW コード F1 クロック8(10)
スタックのトップにあるデータがA及びFに転送されます。F←(SP)、A←(SP+1)
●[4] 交換命令(この命令群もフラグに影響を与えません)
27. XCHG コード EB クロック16(4)
ペアレジスタDEとHLの内容を交換します。
28. XTHL コード E3 クロック16(18)
スタックのトップにあるデータ(2バイト)とペアレジスタHLの内容を交換します。
Lと(SP)、Hと(SP+1)の内容を交換します。
以上の命令はフラグに影響を与えませんが、以下の命令の多くはフラグに影響を与えます。
●[8080のフラグ]
C キャリーフラグ 計算の結果、上位桁へのキャリー(ボロー)が発生したときにセットされる。ローティト命令でもセット、リセットされる。
Z ゼロフラグ 計算結果がゼロのときセット。
P パリティフラグ 1バイト内の1になっているビット数が偶数でセット、奇数でリセットされる。
S サインフラグ 計算結果がマイナスのときセット、(8ビット目が1の数がマイナスになる。FF〜80がマ
イナス、00〜7Fがプラス)
H ハーフキャリーフラグ (CY4)
算術演算のビット3とビット4との間のキャリー、ボローの有無によってSET、RESETさ
れる。
◎ フラグレジスタFにおける各フラグの位置
7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
S | Z | x | H | x | P | x | C |
xは使用されない
なお、以下の説明では影響を受けるフラグのみ表記します。書いてないフラグは影響を受けないことを意味します。
●[5] 8ビット算術・論理演算命令
このグループの命令はINC,DCR命令を除いてすべてアキュムレータ(Aレジスタ)との間で演算されます。また、すべてフラグに影響を与えます。
29. ADD r コード (表9) クロック10(4)
アキュムレータAとレジスタrとを加算し結果をAに入れます。
(フラグについて)
計算の結果、上位桁へのキャリーが発生したときC=1、発生しないときはC=0になります。
計算の結果、ビット3からビット4へのキャリーが発生したときH=1、発生しないときはH=0になります。
結果がゼロのときZ=1、ゼロではないときはZ=0になります。
結果が負数のとき(80〜FFのとき)S=1、正数のときはS=0になります。
8080ではP(パリティフラグ)も結果によってセット、リセットされますが、MYCPU80では、Pフラグは変化しません。
(表9)
r | |
B | 80 |
C | 81 |
D | 82 |
E | 83 |
H | 84 |
L | 85 |
A | 87 |
30.ADI B2 コード C6×× クロック10(7)
AとB2とを加算し、結果をAに入れます。フラグについては29.ADD A,r
と同じです。
31.ADD M コード 86 クロック10(7)
AとHLで示されるメモリの内容とを加算し、結果をAに入れます。フラグについては29.ADD A,r
と同じです。
32. ADC r コード (表10) クロック10(4)
AとレジスタrとさらにキャリーフラグCとを加算し結果をAに入れます。フラグについては29.ADD A,r と同じです。
(表10)
r | |
B | 88 |
C | 89 |
D | 8A |
E | 8B |
H | 8C |
L | 8D |
A | 8F |
33.ACI B2 コード CE×× クロック10(7)
AとB2とキャリーCとを加算し、Aに入れます。フラグについては29.ADD A,r
と同じです。
34.ADC M コード 8E クロック10(7)
AとHLで示されるメモリの内容とキャリーCとを加算し、Aに入れます。フラグについては29.ADDA,r
と同じです。
35. SUB r コード (表11) クロック10(4)
Aからrを引いて結果をAに入れます。
(フラグについて)
計算の結果、上位桁へのボローが発生したときC=1、発生しないときはC=0になります。
計算の結果、ビット3からビット4へのボローが発生したときH=1、発生しないときはH=0になります。
結果がゼロのときZ=1、ゼロではないときはZ=0になります。
結果が負数のとき(80〜FFのとき)S=1、正数のときはS=0になります。
8080ではP(パリティフラグ)も結果によってセット、リセットされますが、MYCPU80では、Pフラグは変化しません。
(表11)
r | |
B | 90 |
C | 91 |
D | 92 |
E | 93 |
H | 94 |
L | 95 |
A | 97 |
36. SUI B2 コード D6×× クロック10(7)
AからB2を引いて結果をAに入れます。フラグは35.SUB rと同じです。
37. SUB M コード 96 クロック10(7)
AからHLで示されるメモリの内容を引いて結果をAに入れます。フラグは35.SUB rと同じです。
38.SBB r コード (表12) クロック10(4)
Aからrを引き、さらにキャリーCを引いて結果をAに入れます。フラグは35.SUB rと同じです。
(表12)
r | |
B | 98 |
C | 99 |
D | 9A |
E | 9B |
H | 9C |
L | 9D |
A | 9F |
39.SBI B2 コード DE×× クロック10(7)
AからB2を引き、さらにキャリーCを引いて結果をAに入れます。フラグは35.SUB rと同じです。
40.SBB M コード 9E クロック10(7)
AからHLで示されるメモリの内容を引き、さらにキャリーCを引いて結果をAに入れます。フラグは35.SUB rと同じです。
41.ANA r コード (表13) クロック10(4)
Aとレジスタrとの論理積(AND)をとって結果をAに入れます。
(フラグについて)
結果がゼロのときZ=1、ゼロではないときはZ=0になります。
結果が負数のとき(80〜FFのとき)S=1、正数のときはS=0になります。
結果のうち1のビットが偶数個あればP=1、奇数個ならP=0になります。
C(キャリー)フラグとH(ハーフキャリー)フラグがクリアされることに注意してください。
(表13)
r | |
B | A0 |
C | A1 |
D | A2 |
E | A3 |
H | A4 |
L | A5 |
A | A7 |
42.ANI B2 コード E6×× クロック10(7)
AとB2とのANDをとって結果をAに入れます。フラグは41.ANA rと同じです。
43.ANA M コード A6 クロック10(7)
AとHLで示されるメモリの内容とのANDをとって結果をAに入れます。フラグは41.ANA rと同じです。
44. ORA r コード (表14) クロック10(4)
Aとrとの論理和(OR)をとって結果をAに入れます。フラグは41.ANA rと同じです。
(表14)
r | |
B | B0 |
C | B1 |
D | B2 |
E | B3 |
H | B4 |
L | B5 |
A | B7 |
45. ORI B2 コード F6×× クロック10(7)
AとB2とのORをとって結果をAに入れます。フラグは、41.ANA rと同じです。
46. ORA M コード B6 クロック10(7)
AとHLで示されるメモリの内容とのORをとって結果をAに入れます。フラグは、41.ANA rと同じです。
47. XRA r コード (表15) クロック10(4)
Aとrとの排他的論理和(Exclusive OR)をとって結果をAに入れます。フラグは41.ANA rと同じです。
(表15)
r | |
B | A8 |
C | A9 |
D | AA |
E | AB |
H | AC |
L | AD |
A | AF |
48. XRI B2 コード EE×× クロック10(7)
AとB2との排他的論理和をとって結果をAに入れます。フラグは41.ANA rと同じです。
49.XRA M コード AE クロック10(7)
AとHLで示されるメモリの内容との排他的論理和をとって結果をAに入れます。フラグは41.ANA rと同じです。
50. CMP r コード (表16) クロック10(4)
Aとrとを比較します。具体的にはA−rを計算しその結果をフラグによって示します。しかしSUB r命令とは異なりAの内容は変化しません。A−rでボローが生じた時C=1、またA=rのときZ=1、A−rがマイナスの時S=1、A−rの結果、ビット3からビット4へのボローがあればH=1になります。
8080ではP(パリティフラグ)も結果によってセット、リセットされますが、MYCPU80では、Pフラグは変化しません。
(表16)
r | |
B | B8 |
C | B9 |
D | BA |
E | BB |
H | BC |
L | BD |
A | BF |
51. CPI B2 コード FE×× クロック10(7)
AとB2とを比較します。フラグは50.CP rと同じです。
52. CMP M コード BE クロック10(7)
AとHLで示されるメモリの内容とを比較します。フラグは50.CP rと同じです。
53. INR r コード (表17) クロック8(5)
レジスタrの内容を+1します。以下のINR,DCR命令ではキャリーCは変化しません。注意して下さい。
ビット3からビット4へのキャリーが発生したときH=1、発生しないときはH=0になります。
結果がゼロのときZ=1、ゼロではないときはZ=0になります。
結果が負数のとき(80〜FFのとき)S=1、正数のときはS=0になります。
8080ではP(パリティフラグ)も結果によってセット、リセットされますが、MYCPU80では、Pフラグは変化しません。
(表17)
r | |
B | 04 |
C | 0C |
D | 14 |
E | 1C |
H | 24 |
L | 2C |
A | 3C |
54. INR M コード 34 クロック8(10)
HLで示されるメモリの内容を+1します。フラグは53..INR rと同じです。
55. DCR r コード (表18) クロック8(5)
rの内容を−1します。
DCR命令ではキャリーCは変化しません。注意して下さい。
ビット3からビット4へのボローが発生したときH=1、発生しないときはH=0になります。
結果がゼロのときZ=1、ゼロではないときはZ=0になります。
結果が負数のとき(80〜FFのとき)S=1、正数のときはS=0になります。
8080ではP(パリティフラグ)も結果によってセット、リセットされますが、MYCPU80では、Pフラグは変化しません。
(表18)
r | |
B | 05 |
C | 0D |
D | 15 |
E | 1D |
H | 25 |
L | 2D |
A | 3D |
56. DCR M コード 35 クロック8(10)
HLで示されるメモリの内容を−1します。フラグは55.DCR rと同じです。
2009.9.9upload
2009.9.10「8080命令説明書」一部訂正
前へ
次へ
ホームページトップへ戻る