8008命令セット[2002-10-13]

命令長
  • オぺランドにNNがあるのが2バイト命令
  • PPPPがあるのが3バイト命令
  • その他はすべて1バイト命令
フラグ変化
区分 説明

Z,S,Pが変化,Cは変化しない

Cが変化,Z,S,Pは変化しない

C,Z,S,Pすべて変化

Z,S,Pが変化,Cは0になる

0x 1x 2x 3x 4x 5x 6x 7x
x0 HLT INC INE INL JFC PPPP JFS PPPP JTC PPPP JTS PPPP
x1 - DCC DCE DCL INP 0 OUT 10 OUT 20 OUT 30
x2 RLC RAL - - CFC PPPP CFS PPPP CTC PPPP CTS PPPP
x3 RFC RFS RTC RTS INP 1 OUT 11 OUT 21 OUT 31
x4 ADI NN SUI NN NDI NN ORI NN JMP PPPP - - -
x5 RST 0 RST 2 RST 4 RST 6 INP 2 OUT 12 OUT 22 OUT 32
x6 LAI NN LCI NN LEI NN LLI NN CAL PPPP - - -
x7 RET - - - INP 3 OUT 13 OUT 23 OUT 24
x8 INB IND INH - JFZ PPPP JFP PPPP JTZ PPPP JTP PPPP
x9 DCB DCD DCH - INP 4 OUT 14 OUT 24 OUT 34
xA RRC RAR - - CFZ PPPP CFP PPPP CTZ PPPP CTP PPPP
xB RFZ RFP RTZ RTP INP 5 OUT 15 OUT 25 OUT 35
xC ACI NN SBI NN XRI NN CPI NN - - - -
xD RST 1 RST 3 RST 5 RST 7 INP 6 OUT 16 OUT 26 OUT 36
xE LBI NN LDI NN LHI NN LMI NN - - - -
xF - - - - INP 7 OUT 17 OUT 27 OUT 37

8x
9x
Ax
Bx
Cx
Dx
Ex
Fx
x0 ADA SUA NDA ORA LAA LCA LEA LLA
x1 ADB SUB NDB ORB LAB LCB LEB LLB
x2 ADC SUC NDC ORC LAC LCC LEC LLC
x3 ADD SUD NDD ORD LAD LCD LED LLD
x4 ADE SUE NDE ORE LAE LCE LEE LLE
x5 ADH SUH NDH ORH LAH LCH LEH LLH
x6 ADL SUL NDL ORL LAL LCL LEL LLL
x7 ADM SUM NDM ORM LAM LCM LEM LLM
x8 ACA SBA XRA CPA LBA LDA LHA LMA
x9 ACB SBB XRB CPB LBB LDB LHB LMB
xA ACC SBC XRC CPC LBC LDC LHC LMC
xB ACD SBD XRD CPD LBD LDD LHD LMD
xC ACE SBE XRE CPE LBE LDE LHE LME
xD ACH SBH XRH CPH LBH LDH LHH LMH
xE ACL SBL XRL CPL LBL LDL LHL LML
xF ACM SBM XRM CPM LBM LDM LHM HLT

 
命令動作(1)
w=B..L , r=A..L , M=(HL) , I=Immidiate Byte : W1,W2,W3=バスサイクル1〜3におけるwait数

命令

動作

レジスタ
メモリ
イミーディエイト

説明

op
clk
op
clk
op
clk
Lrop r<-(op) r1 10+
2*W1
M 16+
2*W1+
2*W2
I
16+
2*W1+
2*W2
opからレジスタへの転送
LMop (HL)<-(op) r 14+
2*W1+
2*W2
-
-
I
18+
2*W1+
2*W2+
2*W3
opからメモリへの転送
INop op<-(op)+1 w 10+
2*W1
-
-
-
-
レジスタをインクリメント
DCop op<-(op)-1 w
-
-
-
-
レジスタをデクリメント
ADop A<-(A)+(op) r 10+
2*W1
M 16+
2*W1+
2*W2
I
16+
2*W1+
2*W2
AにopをAdd
ACr A<-(A)+(op)+(Carry) r
M
I
AにopとcarryをAdd
SUr A<-(A)-(op) r
M
I
AからopをSub
SBr A<-(A)-(op)-(Carry) r
M
I
AからopとborrowをSub
NDr A<-(A)and(op) r
M
I
Aとopをbit単位でand
XRr A<-(A)eor(op) r
M
I
Aとopをbit単位でeor
ORr A<-(A)or(op) r
M
I
Aとopをbit単位でor
CPr (A)-(op) r
M
I
AとopをCompair(flagのみ変化)

 
命令動作(2)
W1,W2,W3=バスサイクル1〜3におけるwait数
命令
動作
clk
説明
RLC
10+
2*W1
Carryを含まない左ローテート
RRC
Carryを含まない右ローテート
RAL
Carryを含む左ローテート
RAR
Carryを含む右ローテート
INP op A<-IO(op) 16+
2*W1+
2*W2
I/Oからの入力
OUT op IO(op)<-A 12+
2*W1+
2*W2
I/Oへ出力
HLT PC<-(PC)+1;命令実行の停止 8+
2*W1
停止

 
命令動作(3)
W1,W2,W3=バスサイクル1〜3におけるwait数
命令
動作
clk
説明
JMP op PC<-op 22+2*W1+2*W2+2*W3 無条件分岐
JFC op if C=0 : PC<-op 22+2*W1+2*W2+2*W3 条件分岐 C=0
if C=1 : PC<-(PC)+3 18+2*W1+2*W2+2*W3
JFZ op if Z=0 : PC<-op 22+2*W1+2*W2+2*W3 条件分岐 Z=0
if Z=1 : PC<-(PC)+3 18+2*W1+2*W2+2*W3
JFS op if S=0 : PC<-op 22+2*W1+2*W2+2*W3 条件分岐 S=0
if S=1 : PC<-(PC)+3 18+2*W1+2*W2+2*W3
JFP op if P=0 : PC<-op 22+2*W1+2*W2+2*W3 条件分岐 P=0
if P=1 : PC<-(PC)+3 18+2*W1+2*W2+2*W3
JTC op if C=1 : PC<-op 22+2*W1+2*W2+2*W3 条件分岐 C=1
if C=0 : PC<-(PC)+3 18+2*W1+2*W2+2*W3
JTZ op if Z=1 : PC<-op 22+2*W1+2*W2+2*W3 条件分岐 Z=1
if Z=0 : PC<-(PC)+3 18+2*W1+2*W2+2*W3
JTS op if S=1 : PC<-op 22+2*W1+2*W2+2*W3 条件分岐 S=1
if S=0 : PC<-(PC)+3 18+2*W1+2*W2+2*W3
JTP op if P=1 : PC<-op 22+2*W1+2*W2+2*W3 条件分岐 P=1
if P=0 : PC<-(PC)+3 18+2*W1+2*W2+2*W3
命令動作(4)
W1,W2,W3=バスサイクル1〜3におけるwait数
命令
動作
clk
説明
CAL op PC->Stack;PC<-op 22+2*W1+2*W2+2*W3 サブルーチンコール
CFC op if C=0 : PC->Stack;PC<-op 22+2*W1+2*W2+2*W3 条件コール C=0
if C=1 : PC<-(PC)+3 18+2*W1+2*W2+2*W3
CFZ op if Z=0 : PC->Stack;PC<-op 22+2*W1+2*W2+2*W3 条件コール Z=0
if Z=1 : PC<-(PC)+3 18+2*W1+2*W2+2*W3
CFS op if S=0 : PC->Stack;PC<-op 22+2*W1+2*W2+2*W3 条件コール S=0
if S=1 : PC<-(PC)+3 18+2*W1+2*W2+2*W3
CFP op if P=0 : PC->Stack;PC<-op 22+2*W1+2*W2+2*W3 条件コール P=0
if P=1 : PC<-(PC)+3 18+2*W1+2*W2+2*W3
CTC op if C=1 : PC->Stack;PC<-op 22+2*W1+2*W2+2*W3 条件コール C=1
if C=0 : PC<-(PC)+3 18+2*W1+2*W2+2*W3
CTZ op if Z=1 : PC->Stack;PC<-op 22+2*W1+2*W2+2*W3 条件コール Z=1
if Z=0 : PC<-(PC)+3 18+2*W1+2*W2+2*W3
CTS op if S=1 : PC->Stack;PC<-op 22+2*W1+2*W2+2*W3 条件コール S=1
if S=0 : PC<-(PC)+3 18+2*W1+2*W2+2*W3
CTP op if P=1 : PC->Stack;PC<-op 22+2*W1+2*W2+2*W3 条件コール P=1
if P=0 : PC<-(PC)+3 18+2*W1+2*W2+2*W3
RST no PC->Stack;PC<-no*8 10+2*W1 特定アドレスコール
命令動作(5)
W1,W2,W3=バスサイクル1〜3におけるwait数
命令
動作
clk
説明
RET PC<-(Stack) 10+2*W1 サブルーチンリターン
RFC if C=0 : PC<-(Stack) 10+2*W1 条件リターン C=0
if C=1 : PC<-(PC)+3 6+2*W1
RFZ if Z=0 : PC<-(Stack) 10+2*W1 条件リターン Z=0
if Z=1 : PC<-(PC)+3 6+2*W1
RFS if S=0 : PC<-(Stack) 10+2*W1 条件リターン S=0
if S=1 : PC<-(PC)+3 6+2*W1
RFP if P=0 : PC<-(Stack) 10+2*W1 条件リターン P=0
if P=1 : PC<-(PC)+3 6+2*W1
RTC if C=1 : PC<-(Stack) 10+2*W1 条件リターン C=1
if C=0 : PC<-(PC)+3 6+2*W1
RTZ if Z=1 : PC<-(Stack) 10+2*W1 条件リターン Z=1
if Z=0 : PC<-(PC)+3 6+2*W1
RTS if S=1 : PC<-(Stack) 10+2*W1 条件リターン S=1
if S=0 : PC<-(PC)+3 6+2*W1
RTP if P=1 : PC<-(Stack) 10+2*W1 条件リターン P=1
if P=0 : PC<-(PC)+3 6+2*W1