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