基本命令の解説
ニモニック
|
オペコード
|
バイト数
|
RTL
|
処理内容
|
レジスタ間転送
|
LD AC, B
|
00010000
|
1
|
AC ← B
|
|
LD B, AC
|
00010001
|
1
|
B ← AC
|
|
LD WA, X
|
00010100
|
1
|
WA ← X
|
|
LD X, WA
|
00010101
|
1
|
X ← WA
|
|
LD AC, WA
|
00011000
|
1
|
AC ← low(WA)
|
|
LDH AC, WA
|
00011001
|
1
|
AC ← high(WA)
|
|
LD WA, AC
|
00011010
|
1
|
WA ← AC
|
上位8ビットは0
|
LDH WA, AC
|
00011011
|
1
|
high(WA) ← AC
|
|
LD AC, X
|
00011100
|
1
|
AC ← low(X)
|
|
LDH AC, X
|
00011101
|
1
|
AC ← high(X)
|
|
LD X, AC
|
00011110
|
1
|
low(X) ← AC
|
|
LDH X, AC
|
00011111
|
1
|
high(X) ← AC
|
|
LD AC, arg
|
10010000
|
2
|
AC ← arg
|
|
LD arg, AC
|
10010001
|
2
|
arg ← AC
|
(おそらく意味のない命令)
|
LD AC, (arg)
|
10010010
|
3
|
AC ← (arg)
|
|
LD AC, label
|
|
|
alias LD AC, (arg)
|
ラベルが表すアドレスの内容をACに代入
|
LD (arg), AC
|
10010011
|
3
|
(arg) ← AC
|
|
LD label, AC
|
|
|
alias LD (arg), AC
|
|
LD WA, arg
|
10011000
|
3
|
WA ← arg
|
argをWAに代入
|
LD WA, (arg)
|
10011010
|
3
|
WA ← (arg)
|
アドレスargの内容をWAに代入
|
LD WA, label
|
|
|
alias LD WA, (arg)
|
ラベルが表すアドレスの内容をWAに代入
|
LD WA, (label)
|
|
|
alias LD WA, (arg)
|
ラベルが表すアドレスの内容をWAに代入
|
LD (arg), WA
|
10011011
|
3
|
(arg) ← WA
|
WAをアドレスargに書き込み
|
LD label, WA
|
|
|
alias LD (arg), WA
|
|
LD (label), WA
|
|
|
alias LD (arg), WA
|
|
LD X, arg
|
10011100
|
3
|
X ← arg
|
Xに即値を代入
|
LDA X, label
|
|
|
alias LD X, arg
|
ラベルが表すアドレスをXに代入
|
LD X, (arg)
|
10011110
|
3
|
X ← (arg)
|
アドレスargの内容をXに代入
|
LD X, label
|
|
|
alias LD X, (arg)
|
ラベルが表すアドレスの内容をXに代入
|
LD (arg), X
|
10011111
|
3
|
(arg) ← X
|
Xをアドレスargに書き込み
|
LD label, X
|
|
|
alias LD (arg), X
|
|
LD (label), X
|
|
|
alias LD (arg), X
|
|
LD X, PC
|
00010111
|
1
|
X ← PC
|
|
インクリメント/デクリメント
|
INC AC
|
00100000
|
1
|
AC ← AC + 1
|
|
INC B
|
00100001
|
1
|
B ← B + 1
|
フラグは変化しない
|
INC X
|
00100101
|
1
|
X ← X + 1
|
フラグは変化しない
|
DEC AC
|
00101000
|
1
|
AC ← AC - 1
|
|
DEC B
|
00101001
|
1
|
B ← B - 1
|
フラグは変化しない
|
DEC X
|
00101101
|
1
|
X ← X - 1
|
フラグは変化しない
|
加算
|
ADD AC, B
|
01000010
|
1
|
AC ← AC + B
|
|
ADD AC, (X)
|
01000110
|
1
|
AC ← AC + (X)
|
|
ADD AC, arg
|
11000000
|
2
|
AC ← AC + arg
|
|
ADD AC, (arg)
|
11000010
|
3
|
AC ← AC + (arg)
|
|
ADD AC, label
|
|
|
alias ADD AC, (arg)
|
|
ADC AC, B
|
01000011
|
1
|
AC ← AC + B + C
|
|
ADC AC, (X)
|
01000111
|
1
|
AC ← AC + (X) + C
|
|
ADC AC, arg
|
11000001
|
2
|
AC ← AC + arg + C
|
|
ADC AC, (arg)
|
11000011
|
3
|
AC ← AC + (arg) + C
|
|
ADC AC, label
|
|
|
alias ADC AC, (arg)
|
|
ADD WA, X
|
01001100
|
1
|
WA ← WA + X
|
|
ADD WA, arg
|
11001000
|
3
|
WA ← WA + arg
|
|
ADC WA, X
|
01001101
|
1
|
WA ← WA + X + C
|
|
ADC WA, arg
|
11001001
|
3
|
WA ← WA + arg + C
|
|
減算
|
SUB AC, B
|
01010010
|
1
|
AC ← AC - B
|
|
SUB AC, (X)
|
01010110
|
1
|
AC ← AC - (X)
|
|
SUB AC, arg
|
11010000
|
2
|
AC ← AC - arg
|
|
SUB AC, (arg)
|
11010010
|
3
|
AC ← AC - (arg)
|
|
SUB AC, label
|
|
|
alias SUB AC, (arg)
|
|
SBC AC, B
|
01010011
|
1
|
AC ← AC - B - C
|
|
SBC AC, (X)
|
01010111
|
1
|
AC ← AC - (X) - C
|
|
SBC AC, arg
|
11010001
|
2
|
AC ← AC - arg - C
|
|
SBC AC, (arg)
|
11010011
|
3
|
AC ← AC - (arg) - C
|
|
SBC AC, label
|
|
|
alias SBC AC, (arg)
|
|
SUB WA, X
|
01011100
|
1
|
WA ← WA - X
|
|
SUB WA, arg
|
11011000
|
3
|
WA ← WA - arg
|
|
SBC WA, X
|
01011101
|
1
|
WA ← WA - X - C
|
|
SBC WA, arg
|
11011001
|
3
|
WA ← WA - arg - C
|
|
論理演算
|
AND AC, AC
|
01100000
|
1
|
AC ← AC & AC
|
ビット単位論理積
|
AND AC, B
|
01100100
|
1
|
AC ← AC & B
|
|
AND AC, (X)
|
01101000
|
1
|
AC ← AC & (X)
|
|
AND AC, arg
|
11100000
|
2
|
AC ← AC & arg
|
|
AND AC, (arg)
|
11100010
|
3
|
AC ← AC & (arg)
|
|
AND AC, label
|
|
|
alias AND AC, (arg)
|
|
OR AC, AC
|
01100001
|
1
|
AC ← AC | AC
|
ビット単位論理和
|
OR AC, B
|
01100101
|
1
|
AC ← AC | B
|
|
OR AC, (X)
|
01101001
|
1
|
AC ← AC | (X)
|
|
OR AC, arg
|
11100001
|
2
|
AC ← AC | arg
|
|
OR AC, (arg)
|
11100011
|
3
|
AC ← AC | (arg)
|
|
OR AC, label
|
|
|
alias OR AC, (arg)
|
|
XOR AC, AC
|
01100010
|
1
|
AC ← AC ^ AC
|
ビット単位排他的論理和
|
XOR AC, B
|
01100110
|
1
|
AC ← AC ^ B
|
|
XOR AC, (X)
|
01101010
|
1
|
AC ← AC ^ (X)
|
|
XOR AC, arg
|
11100100
|
2
|
AC ← AC ^ arg
|
|
XOR AC, (arg)
|
11100110
|
3
|
AC ← AC ^ (arg)
|
|
XOR AC, label
|
|
|
alias XOR AC, (arg)
|
|
AND WA, X
|
01101100
|
1
|
WA ← WA & X
|
ビット単位論理積
|
AND WA, arg
|
11101000
|
3
|
WA ← WA & arg
|
|
OR WA, X
|
01101101
|
1
|
WA ← WA | X
|
ビット単位論理和
|
OR WA, arg
|
11101001
|
3
|
WA ← WA | arg
|
|
XOR WA, X
|
01101110
|
1
|
WA ← WA ^ X
|
ビット単位排他的論理和
|
XOR WA, arg
|
11101011
|
3
|
WA ← WA ^ arg
|
|
シフト
|
SRR AC
|
00110000
|
1
|
|
桁上げつき論理右シフト
|
SLR AC
|
00110001
|
1
|
|
桁上げつき論理左シフト
|
SRA AC
|
00110010
|
1
|
|
算術右シフト
|
SRR WA
|
00111000
|
1
|
|
桁上げつき論理右シフト
|
SLR WA
|
00111001
|
1
|
|
桁上げつき論理左シフト
|
SRA WA
|
00111010
|
1
|
|
算術右シフト
|
分岐
|
JMP X
|
00001000
|
1
|
PC ← X
|
|
JMP (X)
|
00001001
|
1
|
PC ← (X)
|
|
JMP arg
|
10000000
|
3
|
PC ← arg
|
|
JMP (arg)
|
10000010
|
3
|
PC ← (arg)
|
|
JMP label
|
|
|
alias JMP arg
|
|
JMP (label)
|
|
|
alias JMP (arg)
|
|
JC arg
|
10001000
|
3
|
PC ← arg if C = 1
|
|
JNC arg
|
10001001
|
3
|
PC ← arg if C = 0
|
|
JZ arg
|
10001010
|
3
|
PC ← arg if Z = 1
|
|
JNZ arg
|
10001011
|
3
|
PC ← arg if Z = 0
|
|
JS arg
|
10001100
|
3
|
PC ← arg if S = 1
|
|
JNS arg
|
10001101
|
3
|
PC ← arg if S = 0
|
|
JC label
|
|
|
alias JC arg
|
|
JNC label
|
|
|
alias JNC arg
|
|
JZ label
|
|
|
alias JZ arg
|
|
JNZ label
|
|
|
alias JNZ arg
|
|
JS label
|
|
|
alias JS arg
|
|
JNS label
|
|
|
alias JNS arg
|
|
比較
|
CPR AC, arg
|
11110000
|
2
|
AC - arg
|
大小比較
|
TST AC, arg
|
11110001
|
2
|
AC & arg
|
ビット検査
|
CPR WA, arg
|
11111000
|
3
|
WA - arg
|
大小比較
|
TST WA, arg
|
11111001
|
3
|
WA & arg
|
ビット検査
|
その他
|
NEG AC
|
00000100
|
1
|
AC ← -AC
|
ACの符号反転
|
CMP AC
|
00000101
|
1
|
AC ← ~AC
|
ACの各ビット反転(0←→1)
|
NEG WA
|
00001100
|
1
|
WA ← -WA
|
WAの符号反転
|
CMP WA
|
00001101
|
1
|
WA ← ~WA
|
WAの各ビット反転(0←→1)
|
SWPHL WA
|
00001111
|
1
|
high(WA) ⇔ low(WA)
|
WAの上位バイトと下位バイトの交換
|
NOP
|
00000000
|
1
|
|
無処理
|
HLT
|
00000001
|
1
|
H ← 1
|
プロセッサ停止
|
SCF
|
00000010
|
1
|
C ← 1
|
キャリー(桁上げ)フラグのセット
|
RCF
|
00000011
|
1
|
C ← 0
|
キャリー(桁上げ)フラグのリセット
|