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

●今まで説明してきた命令を、表にまとめました

この表は[第110回]で作成したものです。
[第172回]で、その後に説明した命令を表に追記しました。
さらに、[第208回]でも、その後に説明した命令を表に追記しました。
欄が着色されていない命令は、[第110回]までに説明を完了した命令です。
黄色で着色してある命令は、その後、[第172回]までに説明した命令です。
水色で着色した命令は、その後、[第208回]までに説明した命令です。
そして今回、[第208回]以後に説明した命令を、表に追加しました。ピンクで着色してあります。
「説明回」が空欄の命令は、これから検証しなければならない命令です。

命令コード アセンブラ表記 説明(初出)回
01 ddd sss MOV rm, r 第40回
01 ddd 110 MOV r, M 第40回
01 110 110 HLT 第53回
00 ddd 110 MVI rm, imm 第49回
00 ddd 100 INR rm 第58回
00 ddd 101 DCR rm 第58回
10 000 sss ADD rm 第191回
10 001 sss ADC rm 第191回
10 010 sss SUB rm 第191回
10 011 sss SBB rm 第191回
10 100 sss ANA rm 第179回
10 101 sss XRA rm 第179回
10 110 sss ORA rm 第179回
10 111 sss CMP rm 第191回
11 000 110 ADI imm 第191回
11 001 110 ACI imm 第191回
11 010 110 SUI imm 第191回
11 011 110 SBI imm 第191回
11 100 110 ANI imm 第179回
11 101 110 XRI imm 第179回
11 110 110 ORI imm 第179回
11 111 110 CPI imm 第191回
00 000 111 RLC 第166回
00 001 111 RRC 第166回
00 010 111 RAL 第166回
00 011 111 RAR 第166回
11 000 011 JMP addr 第61回
11 011 010 JC addr 第63回
11 010 010 JNC addr 第63回
11 001 010 JZ addr 第63回
11 000 010 JNZ addr 第63回
11 110 010 JP addr 第63回
11 111 010 JM addr 第63回
11 101 010 JPE addr 第63回
11 100 010 JPO addr 第63回
11 001 101 CALL addr 第97回
11 011 100 CC addr 第97回
11 010 100 CNC addr 第97回
11 001 100 CZ addr 第97回
11 000 100 CNZ addr 第97回
11 110 100 CP addr 第97回
11 111 100 CM addr 第97回
11 101 100 CPE addr 第97回
11 100 100 CPO addr 第97回
11 001 001 RET 第98回
11 011 000 RC 第98回
11 010 000 RNC 第98回
11 001 000 RZ 第98回
11 000 000 RNZ 第98回
11 110 000 RP 第98回
11 111 000 RM 第98回
11 101 000 RPE 第98回
11 100 000 RPO 第98回
11 vvv 111 RST vec 第217回
11 011 011 IN port 第106回
11 010 011 OUT port 第106回
00 pp0 001 LXI rp, imm1

第65回

11 pp0 101 PUSH rr 第69回
11 pp0 001 POP rr 第70回
00 110 010 STA addr 第64回
00 111 010 LDA addr 第64回
11 101 011 XCHG 第91回
11 100 011 XTHL 第100回
11 111 001 SPHL 第93回
11 101 001 PCHL 第93回
00 pp1 001 DAD rp 第212回
00 pp0 010 STAX rx 第66回
00 pp1 010 LDAX rx 第66回
00 pp0 011 INX rp 第95回
00 pp1 011 DCX rp 第95回
00 101 111 CMA 第209回
00 110 111 STC 第167回
00 111 111 CMC 第167回
00 100 111 DAA 第223回
00 100 010 SHLD addr 第104回
00 101 010 LHLD addr 第104回
11 111 011 EI
11 110 011 DI
00 000 000 NOP 第156回


説明回が空欄の命令は、とうとう、EIとDIだけになりました。
もう本当にあと一息のところまできましたけれど、ここへきて、かなりペースが落ちてきてしまいました。
さすがに、いささか息切れ状態です。

この前に上の表を整理したのが[第208回]で、日付を確認しましたら、4月19日になっています。
もう、それから1ヶ月以上経ってしまいました。
なのに、その間に説明した命令は、CMA、DAD、RST、DAAのわずか4命令のみですから、いかにも遅い、です。
それだけ、苦戦しているのです。

[第222回](5月8日)に、最終図面のチェック作業中とのご報告をいたしました。
それから、はや2週間が過ぎてしまいましたけれど、チェック作業は、まだ終わりません。

いやあ、大変なことは大変なのですけれど、まあ、とんでもないことに、ほんと、とんでもない作業がはまりこんでしまって、この1週間というもの、もう首までどっぷり泥沼状態でもがいておりました。
その間、「つくるCPU」の作業は完全に停止、しておりました。

本業の方、製品のバグ取りで、大変だったのです。
やっとのことで、そのとんでもないムシ(bug)を発見して、退治できたものですから、1週間ぶりの戦線復帰です。
いうまでもないことですが、ムシといったってノミやゴキブリのことではありません。
プログラムに隠れてひそんでいるやっかいなプログラムミスのことです。
そのプログラムミスを発見する作業のことをデバッグ(debug)といいます。
bugは直訳すると、虫なのです。

たしかに、ちょっと見には発見できなくて、見つけ出すのに苦労するのが常ですから、これをムシと言わずに、なんと言おう、という感じです。
あ。ちなみに、かのエドガー・アラン・ポーの「黄金虫」の原題は、”The Gold−bug”です。

それはともかく、やっと久しぶりに図面のチェック作業も再開しましたので、近いうちに、また進捗状況をご報告するようにいたします。

さて、命令の説明です。

●EI命令とDI命令

最後に残った命令、EI(Enable Interrupts)、DI(Disable Interrupts)は、共にその名が示しているように、割込み(Interrupt)のための命令です。
割込みとは、通常のプログラムの実行の流れとは関係なく、外部から割込み信号を入力することによって、その実行中のプログラムを一時停止しておいて、特定のアドレスに書かれているプログラムを優先実行する仕組みのことです。

8080では、CPUがリセットされて(または電源ONからスタートして)、プログラムの実行を開始したとき、つまり初期状態では、割込みは受けつけられません(Z80やPICなどでも、そうなっています)。
プログラムの中で、このEI命令を実行すると、はじめて割込みが受けつけられるようになります。

そのようにして、割込みは受けつけられるようになりますが、プログラムの実行内容によっては、今は割込みを受けつけては困る、という状況もでてきます。
そのようなときに、DI命令を実行すると、それ以後、再びEI命令が実行されるまでの間は、外部から割込み信号を入力しても、割込みは発生しません。
ようするに、EIとDIは、そのように、割込みを「許可」する、「禁止」する、という働きをするだけの命令です。

うう。ちょっと…。
説明に苦慮しています…。

「割込み許可」とか、「割込み禁止」とか、と言ったって、「そもそも、割込み、って一体なんなのさ。全然わかんないよー」とか言われてしまうと、もう、そこから先へは進めません。
やっぱり、先に「割込み」について、もう少し、突っ込んで説明をした方がよいかもしれません。

本日は時間もなくなってしまいましたので、そのあたりについては、次回までに頭を整理してみることにします。
2009.5.22upload

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