Lesson
8.Instruction
Appendix
|
Lesson 8Instructional SET
Elenco Electronics社のコンピュータートレーニングボード MICRO-MASTER MM-8000 の Lesson 8 に関するメモです.ここでは,Intel社のMPU 8085の命令について学習します.(参照:MM-8000のマニュアルのLesson 8)
目次
命令セット
WHAT THE INSTRUCTION SET IS(命令セットとは)
どんなに洗練されたコンピューターでも,(CPUの機能の) 命令のみ実行でます.プログラムは命令が並んでいます.その各々はコンピューターによって評価され,演算が行われます.
SYMBOLS AND ABBREVIATIONS(記号と省略形)
8085の転送セット説明のための記号と意味
記号 |
意味 |
accumulator |
Aレジスター.8085では,Aレジスターがアキュームレーター |
addr |
16ビットアドレス |
data |
8ビットの値 |
data 16 |
16ビットの値 |
byte 2 |
命令の2番目のバイト |
byte 3 |
命令の3番目のバイト |
port |
I/Oデバイスのアドレス(8ビット) |
r,r1,r2 |
A, B, C, D, E, H, Lレジスターのどれか |
DDD, SSS, RP |
レジスターを表すビットパターン.DDD:destination(行き先) SSS:source(元)
DDD or SSS |
レジスター |
111 |
A |
000 |
B |
001 |
C |
010 |
D |
011 |
E |
100 |
H |
101 |
L |
オペランドがレジスターペア(Register Pair)の場合は,次の通り.
- Bとすると,BCレジスターペアでBが上位アドレスCが下位アドレス
- Dとすると,DEレジスターペアでDが上位アドレスEが下位アドレス
- Hとすると,HLレジスターペアでHが上位アドレスLが下位アドレス
- SPとすると,スタックポインター(16ビット)
|
RP |
レジスタペア B, D, H, SPのいずれかで,そのビットパターンは次の通り.
RP |
レジスターペア |
00 |
BC |
01 |
DE |
10 |
HL |
11 |
SP |
|
rh |
レジスターペアの上位のレジスター |
rl |
レジスターペアの下位のレジスター |
PC |
プログラムカウンター.PCHとするとプログラムカウンターの上位の8ビット,PCLは下位の8ビット. |
SP |
スタックポインター.SPHとするとスタックポインターの上位の8ビット,SPLは下位の8ビット. |
rm |
レジスターのビット m.mの値は0〜7. |
Z |
ゼロフラグ.演算命令の実行結果の値のすべてのビットが 0 ならば,フラグレジスターのゼロフラグのビットが1になる.その他の場合は 0. |
S |
サインフラグ.演算命令の実行結果の値の最上位のビットが 1 ならば,フラグレジスターのサインフラグのビットが 1 になる.その他の場合は 0. |
P |
パリティフラグ.演算命令の実行結果の値のビットに 1 が偶数個含まれていれば,フラグレジスターのパリティフラグのビットが 1 になる.その他の場合は 0. |
CY |
キャリーフラグ.演算命令の実行結果の値にキャリー(桁上げ),あるいはボロー(上の桁からの借り)があった場合,フラグレジスターのキャリーフラグのビットが 1 になる.その他の場合は 0. |
AC |
補助キャリーフラグ(Auxiliary Carry).演算命令の実行結果で,ビット3からビット4に桁上がりがあった場合,フラグレジスターのACフラグのビットが 1 になる.その他の場合は 0. |
INSTRUCTION SET ENCYCLOPEDIA(命令セット辞典)
Data Transfer Group(転送命令)
8085の転送命令.最後の列のCとSは,実行に必要なCPUのCycle数とState数を表す.
命令 |
英語(機能など) |
機能 |
命令コード |
フラグ |
C/S |
MOV r1,r2 |
Move Register |
レジスター ← レジスター
(r1) ← (r2)
|
01DDDSSS |
none |
1/4 |
MOV r,M |
Move from memory |
レジスター ← メモリー
(r) ← ((H)(L))
|
01DDD110 |
none |
2/7 |
MOV M,r |
Move to memory |
メモリー ← レジスター
((H)(L)) ← (r)
|
01110SSS |
none |
2/7 |
MVI r,data |
Move Immediate |
レジスター ← リテラル
(r) ← (byte 2)
|
00DDD110 (byte 2) |
none |
2/7 |
MVI M,data |
Move to memory immediate |
メモリー ← リテラル
((H)(L)) ← (byte 2)
|
00110110 (byte 2) |
none |
3/10 |
LXI rp,data 16 |
Load regiser pair immediate |
レジスターペア ← リテラル
(rl) ← (byte 2)
(rh) ← (byte 3)
|
00RP0001 (byte 2) (byte 3) |
none |
3/10 |
LDA addr |
Load Accumulator direct |
レジスターA ← メモリー
(A) ← ((byte 3)(byte 2))
|
00111010 (byte 2) (byte 3) |
none |
4/13 |
STA addr |
Store Accumulator direct |
メモリー ← レジスターA
((byte 3)(byte 2)) ← (A)
|
00110010 (byte 2) (byte 3) |
none |
4/13 |
LHLD addr |
Load H and L direct |
レジスターHL ← メモリー
(L) ← ((byte 3)(byte 2))
(H) ← ((byte 3)(byte 2)+1)
|
00101010 (byte 2) (byte 3) |
none |
5/16 |
SHLD addr |
Store H and L direct |
メモリー ← レジスターHL
((byte 3)(byte 2)) ← (L)
((byte 3)(byte 2)+1) ← (H)
|
00100010 (byte 2) (byte 3) |
none |
5/16 |
LDAX rp |
Load Accumulator indirect |
レジスターA ← メモリー*1
(A) ← ((rp))
|
00RP1010 |
none |
2/7 |
STAX rp |
Store Accumulator indirect |
メモリー*1 ← レジスターA
((rp)) ← (A)
|
00RP0010 |
none |
2/7 |
XCHG |
Exchange H and L with D and E |
レジスターペア ↔ レジスターペア
(H) ↔ (D)
(L) ↔ (E)
|
11101011
| none |
1/4 |
*1メモリーのアドレスはレジスターペアーで指定するが,rp=B (レジスターBC)と rp=D (レジスターDE)のみ.
Arithmetic Group(算術演算命令)
8085の算術演算命令.最後の列のCとSは,実行に必要なCPUのCycle数とState数を表す.
命令 |
英語(機能など) |
機能 |
命令コード |
フラグ |
C/S |
ADD r |
Add Register |
レジスター + レジスター
(A) ← (A)+(r)
|
10000SSS |
Z, S, P, CY, AC |
1/4 |
ADD M |
Add memory |
レジスター + メモリー
(A) ← (A)+((H)(L))
|
10000110 |
Z, S, P, CY, AC |
2/7 |
ADI data |
Add immediate |
レジスター + リテラル
(A) ← (A)+(byte 2)
|
11000110 (byte 2) |
Z, S, P, CY, AC |
2/7 |
ADC r |
Add Resister with carry |
レジスター + レジスター + キャリー
(A) ← (A)+(r)+(CY)
|
10001SSS |
Z, S, P, CY, AC |
1/4 |
ADC M |
Add memory with carry |
レジスター + メモリー + キャリー
(A) ← (A)+((H)(L))+(CY)
|
10001110 |
Z, S, P, CY, AC |
2/7 |
ACI data |
Add immediate with carry |
レジスター + リテラル + キャリー
(A) ← (A)+(byte 2)+(CY)
|
11001110 (byte 2) |
Z, S, P, CY, AC |
2/7 |
SUB r |
Substract Register |
レジスター - レジスター
(A) ← (A)-(r)
|
10010SSS |
Z, S, P, CY, AC |
1/4 |
SUB M |
Substract memory |
レジスター - メモリー
(A) ← (A)-((H)(L))
|
10010110 |
Z, S, P, CY, AC |
2/7 |
SUI data |
Substract immediate |
レジスター - リテラル
(A) ← (A)-(byte 2)
|
11010110 (byte 2) |
Z, S, P, CY, AC |
2/7 |
SBB r |
Subtract Resister with borrow |
レジスター - レジスター - キャリー
(A) ← (A)-(r)-(CY)
|
10011SSS |
Z, S, P, CY, AC |
1/4 |
SBB M |
Subtract memory with borrow |
レジスター - メモリー - キャリー
(A) ← (A)-((H)(L))-(CY)
|
10011110 |
Z, S, P, CY, AC |
2/7 |
SBI data |
Subtract immediate with borrow |
レジスター - リテラル - キャリー
(A) ← (A)-(byte 2)-(CY)
|
11011110 (byte 2) |
Z, S, P, CY, AC |
2/7 |
INR r |
Increment Register |
レジスター + 1
(r) ← (r)+1
|
00DDD100
|
Z, S, P, AC |
1/4 |
INR M |
Increment memory |
メモリー + 1
((H)(L)) ← ((H)(L))+1
|
00110100
|
Z, S, P, AC |
3/10 |
DCR r |
Decrement Register |
レジスター - 1
(r) ← (r)-1
|
00DDD101
|
Z, S, P, AC |
1/4 |
DCR M |
Decrement memory |
メモリー - 1
((H)(L)) ← ((H)(L))-1
|
00110101
|
Z, S, P, AC |
3/10 |
INX rp |
Increment register pair |
レジスターペア + 1
(rh)(rl) ← (rh)(rl)+1
|
00RP0011
|
|
1/6 |
DCX rp |
Decrement register pair |
レジスターペア - 1
(rh)(rl) ← (rh)(rl)-1
|
00RP1011
|
|
1/6 |
DAD rp |
Add register pair to H and L |
HLレジスターペア + レジアターペア
(H)(L) ← (H)(L)+(rh)(rl)
|
00RP1001
|
CY |
3/10 |
DAA |
Decimal Adjust Accumulator |
10進数演算に用いる.
|
00100111
|
Z,S,P,CY,AC |
1/4 |
Logical Group(論理演算命令)
8085の論理演算命令.最後の列のCとSは,実行に必要なCPUのCycle数とState数を表す.
命令 |
英語(機能など) |
機能 |
命令コード |
フラグ |
C/S |
ANA r |
AND Register |
論理積(レジスター)
(A) ← (A) ∧ (r)
|
10100SSS |
Z, S, P, CY=0, AC=1 |
1/4 |
ANA M |
AND Memory |
論理積(メモリー)
(A) ← (A) ∧ ((H)(L))
|
10100110 |
Z, S, P, CY=0, AC=1 |
2/7 |
ANI data |
AND immediate |
論理積(リテラル)
(A) ← (A) ∧ (byte 2)
|
11100110 (byte 2) |
Z, S, P, CY=0, AC=1C |
2/7 |
XRA r |
Exclusive OR Register |
排他的論理和(レジスター)
(A) ← (A) ⊕ (r)
|
10101SSS |
Z, S, P, CY=0, AC=0 |
1/4 |
XRA M |
Exclusive OR Memory |
排他的論理和(メモリー)
(A) ← (A) ⊕ ((H)(L))
|
10101110 |
Z, S, P, CY=0, AC=0 |
2/7 |
XRI data |
Exclusive OR immediate |
排他的論理和(リテラル)
(A) ← (A) ⊕ (byte 2)
|
11101110 (byte 2) |
Z, S, P, CY=0, AC=0 |
2/7 |
ORA r |
OR Register |
論理和(レジスター)
(A) ← (A) ∨ (r)
|
10110SSS |
Z, S, P, CY=0, AC=0 |
1/4 |
ORA M |
OR Memory |
論理和(メモリー)
(A) ← (A) ∨ ((H)(L))
|
10110110 |
Z, S, P, CY=0, AC=0 |
2/7 |
ORI data |
OR immediate |
論理和(リテラル)
(A) ← (A) ∨ (byte 2)
|
11110110 (byte 2) |
Z, S, P, CY=0, AC=0 |
2/7 |
CMP r |
Compare Register |
比較(レジスター)
(A) - (r)
|
10111SSS |
Z, S, P, CY, AC |
1/4 |
CMP M |
Compare Memory |
比較(メモリー)
(A) - ((H)(L))
|
10111110 |
Z, S, P, CY, AC |
2/7 |
CPI data |
Compare immediate |
比較(リテラル)
(A) - (byte 2)
|
11111110 (byte 2) |
Z, S, P, CY, AC |
2/7 |
RLC |
Rotate left |
左ローテート
(An) ← (An-1)
(A0) ← (A7)
(CY) ← (A7)
|
00000111 |
CY |
1/4 |
RRC |
Rotate right |
右ローテート
(An) ← (An+1)
(A7) ← (A0)
(CY) ← (A0)
|
00001111 |
CY |
1/4 |
RAL |
Rotate left through carry |
左ローテート(キャリーを含む)
(An) ← (An-1)
(CY) ← (A7)
(A0) ← (CY)
|
00010111 |
CY |
1/4 |
RAR |
Rotate right through carry |
右ローテート(キャリーを含む)
(An) ← (An+1)
(CY) ← (A0)
(A7) ← (CY)
|
00011111 |
CY |
1/4 |
CMA |
Complement accumulator |
補数(アキュームレーター)
(A) ← (A)
|
00101111 |
|
1/4 |
CMC |
Complement carry |
補数(キャリー)
(CY) ← (CY)
|
00111111 |
CY |
1/4 |
STC |
Set carry |
キャリーを1に
(CY) ← (1)
|
00110111 |
CY |
1/4 |
Branch Group(分岐命令)
分岐の条件.
条件記号 |
意味 |
フラグ |
CCC |
NZ |
not zero |
Z=0 |
000 |
Z |
zero |
Z=1 |
001 |
NC |
not carry |
CY=0 |
010 |
C |
carry |
CY=0 |
011 |
PO |
parity odd |
P=0 |
100 |
PE |
parity even |
P=1 |
101 |
P |
plus |
S=0 |
110 |
M |
minus |
S=1 |
111 |
8085の分岐命令.最後の列のCとSは,実行に必要なCPUのCycle数とState数を表す.
命令 |
英語(機能など) |
機能 |
命令コード |
フラグ |
C/S |
JMP addr |
Jump |
強制分岐
(PC) ← (byte 3)(byte 2)
|
11000011
(byte 2)
(byte 3) |
|
3/10 |
J condition addr |
Conditional Jump |
条件分岐
If CCC then
(PC) ← (byte 3)(byte 2)
|
11CCC010
(byte 2)
(byte 3) |
|
2,3/7,10 |
CALL addr |
Call |
コール
(SP-1) ← (PCH)
(SP-2) ← (PCL)
(SP) ← (SP)-2
(PC) ← (byte 3)(byte 2)
|
11001101
(byte 2)
(byte 3) |
|
5/18 |
C condition addr |
Condition call |
条件付きコール
If(CCC)then
(SP-1) ← (PCH)
(SP-2) ← (PCL)
(SP) ← (SP)-2
(PC) ← (byte 3)(byte 2)
|
11CCC100
(byte 2)
(byte 3) |
|
2,5/9,18 |
RET |
Return |
リターン
(PCL) ← ((SP))
(PCH) ← ((SP)+1)
(SP) ← (SP)+2
|
11001001 |
|
3/10 |
R condition |
Conditional return |
条件付きリターン
If(CCC) then
(PCL) ← ((SP))
(PCH) ← ((SP)+1)
(SP) ← (SP)+2
|
11CCC000 |
|
1,3/6,12 |
RST n |
Restart |
リスタート
((SP)-1) ← (PCH)
((SP)-2) ← (PCL)
(SP) ← (SP)-2
(PC) ← 8*NNN
|
11NNN111 |
|
3/12 |
PCHL |
Jump H and L indirect-move H and L to PC |
HLレジスタージャンプ
(PCH) ← (H)
(PCL) ← (L)
|
11101001 |
|
1/6 |
Stack, I/O, and Machine Control Group(スタック,入出力,制御命令)
8085のスタック,入出力,制御命令.最後の列のCとSは,実行に必要なCPUのCycle数とState数を表す.
命令 |
英語(機能など) |
機能 |
命令コード |
フラグ |
C/S |
PUSH rp |
Push |
プッシュ
((SP)-1) ← (rh)
((SP)-2) ← (rl)
(SP) ← (SP)-2
|
11RP0101 |
|
3/10 |
PUSH PSW |
Push processor status word |
プッシュ(CPU状態)
((SP)-1) ← (A)
((SP)-2)0 ← (CY)
((SP)-2)1 ← X
((SP)-2)2 ← (P)
((SP)-2)3 ← X
((SP)-2)4 ← (AC)
((SP)-2)5 ← X
((SP)-2)6 ← (Z)
((SP)-2)7 ← (S)
(SP) ← (SP)-2
|
11110101 |
|
3/12 |
POP rp |
Pop |
ポップ
(rl) ← ((SP))
(rh) ← ((SP)+1)
(SP) ← (SP)+2
|
11RP0001
|
|
3/10 |
POP PSW |
Pop processor status word |
ポップ(CPU状態)
(CY) ← ((SP))0
(P) ← ((SP))2
(AC) ← ((SP))4
(Z) ← ((SP))6
(S) ← ((SP))7
(A) ← ((SP)+1)
(SP) ← (SP)+2
|
11110001 |
Z, S, P, CY, AC |
3/12 |
XTHL |
Exchange stack top with H and L |
スタックポインターの交換
(L) ↔ ((SP))
(H) ↔ ((SP)+1)
|
11100011 |
|
5/16 |
SPHL |
Move HL to HL |
スタックポインターの変更
(SP) ← (H)(L)
|
11111001 |
|
1/6 |
IN port |
Input |
I/Oポート入力
(A) ← (data)
|
11011011
(port)
|
|
3/10 |
OUT port |
Output |
I/Oポート出力
(data) ← (A)
|
11010011
(port)
|
|
3/10 |
EI |
Enable interrupts |
割り込みイネーブル(許可)
|
11111011 |
|
1/4 |
DI |
Disable interrupts |
割り込みディセーブル(不許可)
|
11110011 |
|
1/4 |
HLT |
Halt |
停止 |
01110110 |
|
1+/5 |
NOP |
No op |
ノーオペレーション |
00000000 |
|
1/4 |
RIM |
Read Interupt Masks |
割り込みマスク読み込み
(A)0 ← RST5.5設定(0:許可 1:禁止)
(A)1 ← RST6.5設定(0:許可 1:禁止)
(A)2 ← RST7.5設定(0:許可 1:禁止)
(A)3 ← IE設定(0:許可 1:禁止)
(A)4 ← RST5.5状態(1:ペンディング)
(A)5 ← RST6.5状態(1:ペンディング)
(A)6 ← RST7.5状態(1:ペンディング)
(A)7 ← シリアルの入力データ |
00100000 |
|
1/4 |
SIM |
Set Interupt Masks |
割り込みマスク設定
RST5.5設定(0:許可 1:禁止)← (A)0
RST6.5設定(0:許可 1:禁止)← (A)1
RST7.5設定(0:許可 1:禁止)← (A)2
割り込み設定(0:許可 1:禁止)← (A)3
RST7.5設定(1:reset)← (A)4
未定義← (A)5
SOE(Serial Output Enable 1:許可)← (A)6
SOD(シリアル出力データ)←(A)7
| 00100000 |
|
1/4 |
CIRCUIT DESCRIPTION
TEST PROCEDURE
参考文献・WEBサイトなど
|