Intel 8080
出典: フリー百科事典『ウィキペディア(Wikipedia)』
2014年1月10日 (金) 12:22時点における218.42.169.51 (トーク)による版
Intel 8080(インテル 8080、i8080)は、インテルによって開発された8ビットマイクロプロセッサであり、1974年4月に発表された。同社の8008の後継に当たるが命令の互換性はない。8080の命令は、後に拡張され、ザイログのZ80や日立製作所の64180に継承された。初期のパーソナルコンピュータの多くに採用され、モトローラの6800やモステクノロジーの6502(アップル、コモドール、ファミコン、他)と覇を競った。
i8080のロジック設計の中心となったのはビジコン退社後、リコーを経てインテルに入社した嶋正利だった。開発者の特権として彼はフォトマスク余白に嶋家の家紋である引両紋(丸に三つ引)を刻んだ。
目次
レジスタセット
8080は、アキュムレータ1つを含め、7つの汎用レジスタ(8ビット)を持つ。これはたとえば6800と比べて本数としては多い。
16ビット単位の呼称 | 8ビット単位(上位) | 8ビット単位(下位) | 説明 |
---|---|---|---|
PSW | A | Flag | アキュムレータ(A)とフラグ・レジスタ |
BC | B | C | 汎用レジスタ |
DE | D | E | 汎用レジスタ |
HL | H | L | 汎用兼 間接参照用レジスタ |
PC | プログラムカウンタ | ||
SP | スタックポインタ |
(注)命令中ではHLレジスタペアをポインタとして扱うメモリ参照は「M」と表現される: 例 ADD M
- フラグレジスタのビット位置
- b7:S 符号
- b6:Z ゼロ
- b5:未使用 (0に固定)
- b4:H AUXキャリー(パックBCD演算用)
- b3:未使用 (0に固定)
- b2:P パリティ
- b1:未使用 (0に固定)
- b0:C キャリー
- (このフラグ位置は8086を経てIA-32に至るまで代々引き継がれている。)
命令セット
- 命令はバイト単位で、1から3バイトの可変長である。
- 主な命令は、8ビットレジスタ間のロード、8ビットおよび16ビットレジスタペアに対する即値ロード命令、Aレジスタを用いた加減算とビット論理演算・比較演算(HLレジスタペアをポインタとして扱うメモリ参照を含む)、絶対番地指定による条件および無条件ジャンプ・コール命令・リターン命令、スタックへのPUSH/POP操作、割り込み許可・禁止命令、8レベルの割り込みをエミュレートするソフトウェア割り込み命令などがある。
- 相対ジャンプ及び相対コール命令がないため命令を動的に再配置することは原則としてできなかった。
- リセット直後は(プログラム・カウンタが)0番地からアドレスが増加する方向に実行される。また、スタックポインタはアドレスが減少する方向に(プッシュにより)自動的に減算されるため、スタックはメモリ下位(数字の大きい方が上)番地に向かって伸びる。
以下に命令一覧を示す。
- rは8ビットレジスタA,B,C,D,E,H,LまたはM(HLレジスタで示されるメモリ)を表す。ザイログニーモニックではMは(HL)と書く。
- rrは16ビットレジスタBC,DE,HL,SPを表す。なおインテルニーモニックではBC,DE,HLはB,D,Hと書く。
- nは8ビットの数値(即値またはI/Oアドレス)を表す。
- nnは16ビットの数値(即値またはメモリアドレス)を表す。
- インテルニーモニックとザイログニーモニックが異なるものは、スラッシュで区切って示した。
転送・交換命令
- MOV r,r / LD r,r
- 8ビットレジスタ間の転送。MOV M,Mは存在しない(相当するコードはHLT/HALTに割り当てられている)。
- MVI r,n / LD r,n
- 8ビットレジスタに即値をロードする。
- LXI rr,nn / LD rr,nn
- 16ビットレジスタに即値をロードする。
- LDA nn / LD a,(nn)
- メモリの内容をAレジスタにロードする。
- STA nn / LD (nn),A
- Aレジスタの内容をメモリにストアする。
- LHLD nn / LD HL,(nn)
- メモリの内容をHLレジスタにロードする。
- SHLD nn / LD (nn),HL
- HLレジスタの内容をメモリにストアする。
- LDAX B / LD A,(BC)
- BCレジスタで示されるメモリの内容をAレジスタにロードする。HLレジスタのMOV A,Mに相当。
- LDAX D / LD A,(DE)
- DEレジスタで示されるメモリの内容をAレジスタにロードする。
- STAX B / LD (BC),A
- Aレジスタの内容をBCレジスタで示されるメモリにストアする。HLレジスタのMOV M,Aに相当。
- STAX D / LD (DE),A
- Aレジスタの内容をDEレジスタで示されるメモリにストアする。HLレジスタのMOV M,Aに相当。
- SPHL / LD SP,HL
- HLレジスタの内容をSPレジスタに転送する。
- XCHG / EX DE,HL
- DEレジスタとHLレジスタの内容を交換する。
算術演算命令
- ADD r / ADD A,r
- 8ビットレジスタの内容をAレジスタに加算する。
- ADI n / ADD A,n
- 即値をAレジスタに加算する。
- ADC r / ADC A,r
- 8ビットレジスタの内容とCフラグをAレジスタに加算する。
- ACI n / ADC A,n
- 即値とCフラグをAレジスタに加算する。
- SUB r
- 8ビットレジスタの内容をAレジスタから減算する。
- 8ビット加減算命令のうちSUBのみはザイログニーモニックでもデスティネーションのAを表記しない。これはZ80に16ビットのSUB命令がなく(ADD,ADC,SBC命令はある)、対象がAレジスタであることが自明なためである。
- SUI n / SUB n
- 即値をAレジスタから減算する。
- SBB r / SBC A,r
- 8ビットレジスタの内容とCフラグ(ボロー)をAレジスタから減算する。
- SBI n / SBC A,n
- 即値とCフラグ(ボロー)をAレジスタから減算する。
- CMP r / CP r
- 8ビットレジスタの内容をAレジスタから減算するが、結果は格納しない。
- CPI n / CP n
- 即値をAレジスタから減算するが、結果は格納しない。
- INR r / INC r
- 8ビットレジスタの内容をインクリメントする。
- DCR r / DEC r
- 8ビットレジスタの内容をデクリメントする。
- INX rr / INC rr
- 16ビットレジスタの内容をインクリメントする。
- DCX rr / DEC rr
- 16ビットレジスタの内容をデクリメントする。
- DAD rr / ADD HL,rr
- 16ビットレジスタの内容をHLレジスタに加算する。
- DAA
- Aレジスタの内容をBCD補正する。
論理演算命令
- ANA r / AND r
- 8ビットレジスタの内容とAレジスタの論理積をとる。
- ANI n / AND n
- 即値とAレジスタの論理積をとる。
- ORA r / OR r
- 8ビットレジスタの内容とAレジスタの論理和をとる。
- ORI n / OR n
- 即値とAレジスタの論理和をとる。
- XRA r / XOR r
- 8ビットレジスタの内容とAレジスタの排他的論理和をとる。
- XRI n / XOR n
- 即値とAレジスタの排他的論理和をとる。
- CMA / CPL
- Aレジスタの内容を反転する。
ローテート命令
- RLC / RLCA
- Aレジスタの内容とCフラグを連結して左ローテートする。
- RRC / RRCA
- Aレジスタの内容とCフラグを連結して右ローテートする。
- RAL / RLA
- Aレジスタの内容を左ローテートする。
- RAR / RRA
- Aレジスタの内容を右ローテートする。
ジャンプ・コール・リターン命令
- JMP nn / JP nn
- 指定の番地にジャンプする。
- JNZ nn / JP NZ,nn
- Zフラグが0のとき指定の番地にジャンプする。
- JZ nn / JP Z,nn
- Zフラグが1のとき指定の番地にジャンプする。
- JNC nn / JP NC,nn
- Cフラグが0のとき指定の番地にジャンプする。
- JC nn / JP C,nn
- Cフラグが1のとき指定の番地にジャンプする。
- JPO nn / JP PO,nn
- Pフラグが0のとき指定の番地にジャンプする。
- JPE nn / JP PE,nn
- Pフラグが1のとき指定の番地にジャンプする。
- JP nn / JP P,nn
- Sフラグが0のとき指定の番地にジャンプする。
- JM nn / JP M,nn
- Sフラグが1のとき指定の番地にジャンプする。
- PCHL / JP (HL)
- HLの内容をPCに転送する。
- CALL nn
- 指定の番地をコールする。
- CNZ nn / CALL NZ,nn
- Zフラグが0のとき指定の番地をコールする。
- CZ nn / CALL Z,nn
- Zフラグが1のとき指定の番地をコールする。
- CNC nn / CALL NC,nn
- Cフラグが0のとき指定の番地をコールする。
- CC nn / CALL C,nn
- Cフラグが1のとき指定の番地をコールする。
- CPO nn / CALL PO,nn
- Pフラグが0のとき指定の番地をコールする。
- CPE nn / CALL PE,nn
- Pフラグが1のとき指定の番地をコールする。
- CP nn / CALL P,nn
- Sフラグが0のとき指定の番地をコールする。
- CM nn / CALL M,nn
- Sフラグが1のとき指定の番地をコールする。
- RST p / RST n
- (p=0~7) p*8番地をコールする。割り込み用。
- RET
- リターンする。
- RNZ / RET NZ
- Zフラグが0のときリターンする。
- RZ / RET Z
- Zフラグが1のときリターンする。
- RNC / RET NC
- Cフラグが0のときリターンする。
- RC / RET C
- Cフラグが1のときリターンする。
- RPO / RET PO
- Pフラグが0のときリターンする。
- RPE / RET PE
- Pフラグが1のときリターンする。
- RP / RET P
- Sフラグが0のときリターンする。
- RM / RET M
- Sフラグが1のときリターンする。
スタック操作命令
- PUSH rr
- 16ビットレジスタをプッシュする。SPは指定できない。
- PUSH PSW / PUSH AF
- PSWをプッシュする。
- POP rr
- 16ビットレジスタをポップする。SPは指定できない。
- POP PSW / POP AF
- PSWをポップする。
- XTHL / EX (SP),HL
- HLレジスタとスタックトップの内容を交換する。
フラグ操作命令
- STC / SCF
- Cフラグを1にする。
- CMC / CCF
- Cフラグを反転する。
入出力命令
- IN n / IN A,(n)
- I/OアドレスからAレジスタに入力する。
- OUT n / OUT (n),A
- Aレジスタの内容をI/Oアドレスに出力する。
CPU制御命令
- NOP
- 何もしない。
- HLT / HALT
- CPUを停止し、割り込みを待つ。
- DI
- 割り込みを禁止する。
- EI
- 割り込みを許可する。
セカンドソース
NEC製のセカンドソース品 (μPD8080A) は減算時における10進補正フラグの扱いがオリジナルとは違っており、ここを全く同じにしたもの (μPD8080AF) が追加販売されている。TK-80には前者が、TK-80Eには後者が採用された。