Yamamoto's Laboratory
 
Lesson
   1.Numbers
   2.Memory
   3.RAM
   4.Ports
   5.Timer
   6.ROM
   7.8085A
   8.Instruction
   9.Monitor
 
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サイトなど



no counter