戻る

i8080

Intel 8080/A
Data 8/16bit / Address Bus 16bit
Cycle 2.0MHz〜3.0MHz
(1974/10)

改良型:「i8085」
1976年にリリースされる。
命令の追加と5Vへの単一電源化、割込コントローラ内蔵、クロックジェネレータ、システムコントローラ内蔵などの改良がなされている。
(周波数3.0MHz〜5.0MHz)

これは余談だが、「ゲームセンターあらし」の主人公「石野あらし」。
彼が使う必殺技「炎のコマ」は1秒間に200万回以上の速度でレバーやボタンを操作するという設定である。
これは当時のゲームに「i8080」(動作クロック2MHz)が使われていたことに由来するものであろう。
例えば、今のCPUだと1秒間に30億回(=3GHz)程度とすると…
手の動作の移動距離が30p程度だとすると0.3m×3,000,000,000=900,000,000m=900,000kmとなり、光速を超えてしまう。
本当に余談。

本当の余談は嶋氏が開発者特権として、8080のフォトマスク余白にサインの代わりとして自身の家紋を入れてあるということである。
(フォトマスクとは電子回路のパターンを刻んだ、いわば原版で基板に電子回路を転写するためのものである)

●8080のピン配列

A101 40A11
GND2 39A14
D43 38A13
D54 37A12
D65 36A15
D76 35A9
D37 34A8
D28 33A7
D19 32A6
D010 31A5
Vbb11 30A4
RESET12 29A3
HOLD13 28Vdd
INT14 27A2
φ215 26A1
ITNE16 25A0
DBIN17 24WAIT
WR18 23READY
SYNC19 22φ1
Vcc20 21HLDA

●8080の命令

命令(ニーモニック)は以下の構成となっている。

  ニーモニック [OP1[,OP2]]

オペランド表記は以下の通りである。

「r」は8bitレジスタ「A,B,C,D,E,H,L,M=(HL)」を表す
「rr」は16bitレジスタ「BC,DE,HL,SP(Stack Pointer)」を表す
「PSW」は16bitレジスタ「PSW」(上位8bitが「A」レジスタ、下位8bitがフラグレジスタ)を表す
「pc」は16bitレジスタである「プログラムカウンタ」を表す
「f」はフラグ「S,Z,H,P,C」を表す (フラグはフラグレジスタとして扱われる)
 フラグは演算結果の状態を表す

  bit7「S」:最上位bit(MSB)が「1」の場合、成立
  bit6「Z」:「0」の場合、成立
  bit4「H」:算術演算のbit3/4間(Half)でAUX 桁あふれ(Carry)、桁の繰り下がり(Borrow)があった場合、成立
  bit2「P」:「1」のbitが偶数個の場合、成立 (Parity:パリティ)
  bit0「C」:Carry、もしくはBorrowがあった場合、成立

※「n」は8bit、「nn」は16bitのイミディエイト値(Immediate Operand)を表す
※「aa」は16bitアドレス値を表す

●転送命令

ニーモニックオペランド動作
MOV r,r 8bitデータレジスタ間のデータ転送 (メモリアクセス用の「M」同士では行えない)
MVI r,n 8bit指定レジスタへ8bitイミディエイト値をロード(読込)
LXI r,nn16bit指定レジスタへ16bitイミディエイト値をロード
LDA aa 指定アドレスの内容を「A」レジスタにロード
STA aa 「A」レジスタから指定アドレスにデータをストア(格納)
LHLDaa 指定アドレスの内容を「HL」レジスタにロード
SHLDaa 「HL」レジスタから指定アドレスにデータをストア
LDAXr 8bit指定レジスタ(r=B->BC,D->DE)で示される指定アドレスの内容を「A」レジスタにロード
STAXr 「A」レジスタから指定レジスタ(r=B->BC,D->DE)で示される指定アドレスにストア
SPHL 「HL」レジスタの内容を「SP」レジスタに転送
XCHG 「DE」レジスタと「HL」レジスタの内容を交換

●算術演算命令 (特に指定がない場合、対象は「A」レジスタ)

ニーモニックオペランド動作
ADDr 8bit指定レジスタの内容を「A」レジスタに加算
ADIn 8bitイミディエイト値を「A」レジスタに加算
ADCr 8bit指定レジスタの内容と「C」フラグの値を「A」レジスタに加算
ACIn 8bitイミディエイト値と「C」フラグの値を「A」レジスタに加算
SUBr 8bit指定レジスタの内容を「A」レジスタから減算
SUIn 8bitイミディエイト値を「A」レジスタから減算
SBBr 8bit指定レジスタの内容と「C」フラグの値を「A」レジスタから減算
SBIn 8bitイミディエイト値と「C」フラグの値を「A」レジスタから減算
SUBr 8bit指定レジスタの内容を「A」レジスタから減算するが、結果は格納しない(=比較)
SUIn 8bitイミディエイト値を「A」レジスタから減算するが、結果は格納しない(=比較)
INRr 8bit指定レジスタの内容をインクリメント
DCRr 8bit指定レジスタの内容をデクリメント
INXrr16bit指定レジスタの内容をインクリメント
DCXrr16bit指定レジスタの内容をデクリメント
DADrr16bit指定レジスタの内容を「HL」レジスタに加算
DAA 「A」レジスタの内容をBCD(Binary-Coded Decimal:二進化十進)補正

●論理演算命令 (対象は「A」レジスタのみ)

ニーモニックオペランド動作
ANAr8bit指定レジスタの内容と「A」レジスタの論理積
ANIn8bitイミディエイト値と「A」レジスタの論理積
ORAr8bit指定レジスタの内容と「A」レジスタの論理和
ORIn8bitイミディエイト値と「A」レジスタの論理和
XRAr8bit指定レジスタの内容と「A」レジスタの排他的論理和
XRIn8bitイミディエイト値と「A」レジスタの排他的論理和
CMA 「A」レジスタの内容を反転

●ローテート命令 (対象は「A」レジスタと「C」フラグのみ)

ニーモニックオペランド動作
RLC 「A」レジスタの内容と「C」フラグを連結して左ローテート
RRC 「A」レジスタの内容と「C」フラグを連結して右ローテート
RAL 「A」レジスタの内容を左ローテート
RAR 「A」レジスタの内容を右ローテート

●分岐制御命令

ニーモニックオペランド動作
JMP aa 指定アドレスにジャンプ
JNf aa 指定フラグ(f=Z,C)が0のとき、指定アドレスにジャンプ
Jf aa 指定フラグ(f=Z,C)が1のとき、指定アドレスにジャンプ
JPO aa 「P」フラグが0のとき、指定アドレスにジャンプ
JPE aa 「P」フラグが1のとき、指定アドレスにジャンプ
JP aa 「S」フラグが0のとき、指定アドレスにジャンプ
JM aa 「S」フラグが1のとき、指定アドレスにジャンプ
PCHL 「HL」レジスタの内容を「PC」に転送
CALLaa 指定アドレスをサブルーチンコール
CNf aa 指定フラグ(f=Z,C)が0のとき、指定アドレスをサブルーチンコール
Cf aa 指定フラグ(f=Z,C)が1のとき、指定アドレスをサブルーチンコール
CPO aa 「P」フラグが0のとき、指定アドレスをサブルーチンコール
CPE aa 「P」フラグが1のとき、指定アドレスをサブルーチンコール
CP aa 「S」フラグが0のとき、指定アドレスをサブルーチンコール
CM aa 「S」フラグが1のとき、指定アドレスをサブルーチンコール
RST n n(0〜7)*8番地をコール(割込)
RET n サブルーチンから復帰
JNf aa 指定フラグ(f=Z,C)が0のとき、サブルーチンから復帰
Jf aa 指定フラグ(f=Z,C)が1のとき、サブルーチンから復帰
JPO aa 「P」フラグが0のとき、サブルーチンから復帰
JPE aa 「P」フラグが1のとき、サブルーチンから復帰
JP aa 「S」フラグが0のとき、サブルーチンから復帰
JM aa 「S」フラグが1のとき、サブルーチンから復帰

●スタック操作命令 (対象は16bitレジスタのみ)

ニーモニックオペランド動作
PUSHrr 16bit指定レジスタの内容を「SP」にプッシュ
PUSHPSW「PSW」レジスタの内容を「SP」にプッシュ
POP rr 16bit指定レジスタに「SP」からポップ
POP PSW「PSW」レジスタに「SP」からポップ
XTHL 「HL」レジスタと「SP」レジスタ上位の内容を交換

●フラグ操作命令 (対象は「C」フラグのみ)

ニーモニックオペランド動作
STC 「C」フラグを1にする(セット)
CMC 「C」フラグを反転<

●入出力命令 (対象は「A」レジスタのみ)

ニーモニックオペランド動作
IN aa指定I/Oアドレスの内容を「A」レジスタに入力
OUTaa「A」レジスタの内容を指定I/Oアドレスに出力

●CPU制御命令

ニーモニックオペランド動作
NOP 何もしない
HLT CPUを停止し、割込を待つ
DI 割込を禁止
EI 割込を許可

●8085追加命令

ニーモニックオペランド動作
RIM 割込マスクを「A」レジスタに出力(読込)
SIM 割込マスクを「A」レジスタから入力(セット)

[TOPに戻る]