Intel 8008
Intel 8008の最新ニュースをまとめて検索!
Intel 8008(インテル 8008、i8008)は、インテルによって開発製造された初期のマイクロプロセッサであり、1972年4月に発表された。
目次 |
[編集] 概要
本来はComputer Terminal Corporation(CTC)からの委託で、同社のプログラム可能な端末 Datapoint 2200で使用する予定だった。しかし、チップの提供が遅れたことと性能がCTCの目標に達しなかったため、2200には使われなかった(因みにDP2200は結局TTL素子で製作された)。インテルとCTCの契約により、インテルはそのチップを他の顧客に販売する許可を得ていた。
8008とその後継のCISCプロセッサの命令セットにはCTCの設計に基づいた部分が多く含まれている。
チップは、(18ピンのDIPパッケージであるためにピン数が制限されていたので)ひとつの8ビットバスしか持たず、それをサポートするために大規模な外付け回路が必要とされた。たとえば14ビットアドレスで16Kバイトのメモリにアクセスできるようにしようとすると、外部にメモリアドレスレジスタ (MAR) を設けてアドレス出力をラッチする必要があった(アドレス出力が1サイクルでは完了しないため)。8008は、8本の入力ポートと24本の出力ポートにアクセスできる。
単位時間当たりの命令実行回数 (MIPS) では4ビットのIntel 4004やIntel 4040に若干負けるのだが、8008は8ビットの演算ができ、大きなメモリ空間にアクセスできたため、4ビットチップと比較して3~4倍の計算能力があるといわれた。
端末制御用に作られたものとしては納得できる設計だったが、他の用途に使うには困難がありすぎた。初期のごく少数のコンピュータ(最初に採用した会社はリコーといわれる)がこのマイクロプロセッサを使って設計されたが、一般に使われるようになったと言えるのは次の大幅に改良を加えられたIntel 8080である。
[編集] アーキテクチャ
- メモリ空間は14ビット(16KB)。
- I/Oは入力ポートが8個、出力ポートが24個。
- A,B,C,D,E,H,Lの8ビットレジスタと、8レベルのハードウェアスタック(うち1つはプログラムカウンタ)、S,Z,P,Cのフラグをもつ。
- メモリへのアクセスはMレジスタ(HLレジスタペアによる間接指定)でしか行えない。それ以外のレジスタによる間接指定や、アドレス直接指定によるアクセスはできない。
- 16ビットレジスタという概念は存在しない。B,C,D,Eレジスタは単なる8ビットレジスタである。
- スタックポインタはレジスタとしては存在しない。また、コール・リターン以外にスタックを操作する命令も存在しない。
[編集] 命令セット
- 命令長は1~3バイト。OPコードはすべて1バイト。2バイト命令は1バイトの即値、3バイト命令(ジャンプ・コール)は2バイトのアドレスをもつ。
- ニーモニックのOPコードはすべて3文字。
- RST/INP/OUT命令を除き、機械語でオペランドを持たない命令(1バイト命令)はニーモニックでもオペランドを持たない。すなわち機械語のOPコードにエンコードされているレジスタ指定はニーモニックでもOPコードに含まれる。その結果、「LCD」「LED」「ACE」「SUM」などといった特徴あるニーモニックが存在する。
以下に命令一覧を示す。
- rはレジスタA,B,C,D,E,H,L,Mを表す。
- nは8ビット即値を表す。
- nnは16(14)ビットアドレスを表す。
[編集] 転送命令
- Lrr
- 8ビットレジスタ間の転送。LMMは存在しない。
- LrI
- 8ビットレジスタに即値をロードする。
[編集] 算術演算命令
- ADr
- 8ビットレジスタの内容をAレジスタに加算する。
- ADI n
- 即値をAレジスタに加算する。
- ACr
- 8ビットレジスタの内容とCフラグをAレジスタに加算する。
- ACI n
- 即値とCフラグをAレジスタに加算する。
- SUr
- 8ビットレジスタの内容をAレジスタから減算する。
- SUI n
- 即値をAレジスタから減算する。
- SBr
- 8ビットレジスタの内容とCフラグ(ボロー)をAレジスタから減算する。
- SBI n
- 即値とCフラグ(ボロー)をAレジスタから減算する。
- CPr
- 8ビットレジスタの内容をAレジスタから減算するが、結果は格納しない。
- CPI n
- 即値をAレジスタから減算するが、結果は格納しない。
- INr
- 8ビットレジスタの内容をインクリメントする。INMは存在しない。
- DCr
- 8ビットレジスタの内容をデクリメントする。DCMは存在しない。
[編集] 論理演算命令
- NDr
- 8ビットレジスタの内容とAレジスタの論理積をとる。
- NDI n
- 即値とAレジスタの論理積をとる。
- ORr
- 8ビットレジスタの内容とAレジスタの論理和をとる。
- ORI n
- 即値とAレジスタの論理和をとる。
- XRr
- 8ビットレジスタの内容とAレジスタの排他的論理和をとる。
- XRI n
- 即値とAレジスタの排他的論理和をとる。
[編集] ローテート命令
- RLC
- Aレジスタの内容とCフラグを連結して左ローテートする。
- RRC
- Aレジスタの内容とCフラグを連結して右ローテートする。
- RAL
- Aレジスタの内容を左ローテートする。
- RAR
- Aレジスタの内容を右ローテートする。
[編集] ジャンプ・コール・リターン命令
- JMP nn
- 指定の番地にジャンプする。
- JFZ nn
- Zフラグが0のとき指定の番地にジャンプする。
- JTZ nn
- Zフラグが1のとき指定の番地にジャンプする。
- JFC nn
- Cフラグが0のとき指定の番地にジャンプする。
- JTC nn
- Cフラグが1のとき指定の番地にジャンプする。
- JFP nn
- Pフラグが0のとき指定の番地にジャンプする。
- JTP nn
- Pフラグが1のとき指定の番地にジャンプする。
- JFS nn
- Sフラグが0のとき指定の番地にジャンプする。
- JTS nn
- Sフラグが1のとき指定の番地にジャンプする。
- CAL nn
- 指定の番地をコールする。
- CFZ nn
- Zフラグが0のとき指定の番地をコールする。
- CTZ nn
- Zフラグが1のとき指定の番地をコールする。
- CFC nn
- Cフラグが0のとき指定の番地をコールする。
- CTC nn
- Cフラグが1のとき指定の番地をコールする。
- CFP nn
- Pフラグが0のとき指定の番地をコールする。
- CTP nn
- Pフラグが1のとき指定の番地をコールする。
- CFS nn
- Sフラグが0のとき指定の番地をコールする。
- CTS nn
- Sフラグが1のとき指定の番地をコールする。
- RST p
- (p=0~7) p*8番地をコールする。割り込み用。
- RET
- リターンする。
- RFZ
- Zフラグが0のときリターンする。
- RTZ
- Zフラグが1のときリターンする。
- RFC
- Cフラグが0のときリターンする。
- RTC
- Cフラグが1のときリターンする。
- RFP
- Pフラグが0のときリターンする。
- RTP
- Pフラグが1のときリターンする。
- RFS
- Sフラグが0のときリターンする。
- RTS
- Sフラグが1のときリターンする。
[編集] 入出力命令
- INP p
- (p=0~7)Aレジスタに入力する。
- OUT p
- (p=8~23)Aレジスタの内容を出力する。
[編集] CPU制御命令
- NOP
- 何もしない。
- HLT
- CPUを停止し、割り込みを待つ。
[編集] 余談
・CPUの元祖となったIntel 4004の「4004」という名称は開発コードがそのまま商品名になったものである。しかし、世間では4ビットCPUだから4004なのだと勘違いされ、そのまま広く認知されてしまった。8008の発表の時、Intelは世間の混乱を招かないために開発コード1201を8008と改名して発表した経緯がある。
|
||||||||||||||||||||||
最終更新 2009年9月15日 (火) 23:54 (日時は個人設定で未設定ならばUTC)。
【Intel 8008】変更履歴


