標準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命令説明書」一部訂正

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