MCS-51

レジスタ

A/ACC 8bit アキュムレータ※1
B 8bit Bレジスタ※1
R0 - R78bit 汎用レジスタ R0/R1/R2/R3/R4/R5/R6/R7
最大4バンク定義することができ(内蔵RAMと共有)、バンクを切り替えて使用可
PSW 8bit プログラムステータスワード※1
SP 8bit スタックポインタ※2
DPTR 16bitデータポインタ※3
PC 16bitプログラムカウンタ
※1ビットアクセス可
※2内蔵RAM 0x00 - 0xff のポインタ
※3上位8ビットをDPH、下位8ビットをDPLとしてSFR経由でアクセス可

1. プログラムステータスワード

7 6 5 4 3 2 10
CYACF0RS1RS0OV-P
CY キャリーフラグ
1演算結果が符号なしの最大範囲(0 - 255)を超えた
0上記以外
AC 補助キャリーフラグ
1演算結果の下位4bitでキャリー、または下位4bitでボロー発生
0上記以外
F0 汎用フラグ※1
RS1/RS0レジスタバンク番号
RS1RS0説明
0 0 レジスタバンク0(内蔵RAM 0x00-0x07)
0 1 レジスタバンク1(内蔵RAM 0x08-0x0f)
1 0 レジスタバンク2(内蔵RAM 0x10-0x17)
1 1 レジスタバンク3(内蔵RAM 0x18-0x1f)
OV オーバーフローフラグ
1演算結果が符号ありの最大範囲(-128 - 127)を超えた
0上記以外
- 汎用フラグ※1
P パリティーフラグ
1演算結果を2進数で足すと奇数
0上記以外
※1演算などの影響は受けないため、ユーザーが自由に使用可


命令一覧表

記号の説明

1. サイズ欄

Bオペランドサイズが8ビット
Wオペランドサイズが16ビット

2. ニーモニック欄

# 8/16ビットの即値データ
#11 絶対アドレス(上位5bitはPC、下位11bit)
#16 絶対アドレス(0x0000 - 0xffff)
d 相対アドレス(-128 - 127)
Rn カレントバンクの汎用レジスタR0 - R7
@Ri カレントバンクの汎用レジスタR0, R1で、レジスタが指しているアドレスの内容
directダイレクト領域アドレス
$ 命令が置かれている先頭アドレス

3. 機能欄

[3:0] 下位4ビット(3 - 0 ビット)
[7:0] 下位8ビット(7 - 0 ビット)
[15:8]上位8ビット(15 - 8 ビット)

4. フラグ欄(CAO)

-変化なし
*命令の実行により変化
00にクリア
11をセット

5. ステート欄

1ステート = 12クロック

命令

(1) 転送
命令群サイズニーモニック機能 CAO命令長ステート補足
MOV B- MOV A,Rn A ← Rn ---1 1
B- MOV A,direct A ← direct ---2 1
B- MOV A,@Ri A ← @Ri ---1 1
B- MOV A,# A ← # ---2 1
B- MOV Rn,A Rn ← A ---1 1
B- MOV Rn,direct Rn ← direct ---2 2
B- MOV Rn,# Rn ← # ---2 1
B- MOV direct,A direct ← A ---2 1
B- MOV direct,Rn direct ← Rn ---2 2
B- MOV direct,direct direct ← direct ---3 2
B- MOV direct,@Ri direct ← @Ri ---2 2
B- MOV direct,# direct ← # ---3 2
B- MOV @Ri,A @Ri ← A ---1 1
B- MOV @Ri,direct @Ri ← direct ---2 2
B- MOV @Ri,# @Ri ← # ---2 1
-W MOV DPTR,# DPTR ← # ---3 2
MOVC B- MOVC A,@A+DPTR A ← @A+DPTR ---1 2
B- MOVC A,@A+PC A ← @A+PC ---1 2
MOVX B- MOVX A,@DPTR A ← @DPTR ---1 2
B- MOVX @DPTR,A @DPTR ← A ---1 2
B- MOVX A,@Ri A ← @Ri ---1 2
B- MOVX @Ri,A @Ri ← A ---1 2
PUSH B- PUSH direct SP ← SP + 1 : (SP) ← direct ---2 2
POP B- POP direct direct ← (SP) : SP ← SP - 1 ---2 2

(2) 交換
命令群サイズニーモニック機能 CAO命令長ステート補足
XCH B- XCH A,Rn A ⇔ Rn ---1 1
B- XCH A,direct A ⇔ direct ---2 1
B- XCH A,@Ri A ⇔ @Ri ---1 1
XCHD B- XCHD A,@Ri A[3:0] ⇔ @Ri[3:0] ---1 1

(3) 算術演算
命令群サイズニーモニック機能 CAO命令長ステート補足
ADD B- ADD A,Rn A ← A + Rn ***1 1
B- ADD A,direct A ← A + direct ***2 1
B- ADD A,@Ri A ← A + @Rn ***1 1
B- ADD A,# A ← A + # ***2 1
ADDC B- ADDC A,Rn A ← A + Rn + C ***1 1
B- ADDC A,direct A ← A + direct + C ***2 1
B- ADDC A,@Ri A ← A + @Rn + C ***1 1
B- ADDC A, # A ← A + # + C ***2 1
SUBB B- SUBB A,Rn A ← A - Rn - C ***1 1
B- SUBB A,direct A ← A - direct - C ***2 1
B- SUBB A,@Ri A ← A - @Rn - C ***1 1
B- SUBB A, # A ← A - # - C ***2 1
INC B- INC A A ← A + 1 ---1 1
B- INC Rn Rn ← Rn + 1 ---1 1
B- INC direct direct ← direct + 1 ---2 1
B- INC @Ri @Ri ← @Ri + 1 ---1 1
-W INC DPTR DPTR ← DPTR + 1 ---1 2
DEC B- DEC A A ← A - 1 ---1 1
B- DEC Rn Rn ← Rn - 1 ---1 1
B- DEC direct direct ← direct - 1 ---2 1
B- DEC @Ri @Ri ← @Ri - 1 ---1 1
MUL B- MUL AB A = [A * B] % 256
B = [A * B] / 256
0-*1 4
DIV B- DIV AB A = A / B
B = A % B
0-*1 4
DA B- DA A BCD補正 *--1 1

(3) 論理演算
命令群サイズニーモニック機能 CAO命令長ステート補足
ANL B- ANL Rn A ← A and Rn ---1 1
B- ANL A,direct A ← A and direct ---2 1
B- ANL A,@Ri A ← A and @Ri ---1 1
B- ANL A,# A ← A and # ---2 1
B- ANL direct,A direct ← direct and A ---2 1
B- ANL direct,# direct ← direct and # ---3 2
ORL B- ORL A,Rn A ← A or Rn ---1 1
B- ORL A,direct A ← A or direct ---2 1
B- ORL A,@Ri A ← A or @Ri ---1 1
B- ORL A,# A ← A or # ---2 1
B- ORL direct,A direct ← direct or A ---2 1
B- ORL direct,# direct ← direct or # ---3 2
XRL B- XRL A,Rn A ← A xor Rn ---1 1
B- XRL A,direct A ← A xor direct ---2 1
B- XRL A,@Ri A ← A xor @Ri ---1 1
B- XRL A,# A ← A xor # ---2 1
B- XRL direct,A direct ← direct xor A ---2 1
B- XRL direct,# direct ← direct xor # ---3 2
CLR B- CLR A A ← 0 ---1 1
CPL B- CPL A A ← A ^ 0xff ---1 1

(4) ジャンプ・コール・リターン
命令群サイズニーモニック機能 CAO命令長ステート補足
JMP -- AJMP #11 PC ← PC[15:11] or #11 ---2 2
-- LJMP #16 PC ← #16 ---3 2
-- SJMP rel PC ← $+2+d ---2 2
-- JMP @A+DPTR PC ← @A+DPTR ---1 2
Jxx -- JC rel if CY=1 then PC ← $+2+d ---2 2
-- JNC rel if CY=0 then PC ← $+2+d ---2 2
-- JB bit,rel if bit=1 then PC ← $+3+d ---3 2
-- JNB bit,rel if bit=0 then PC ← $+3+d ---3 2
-- JZ rel if A=0 then PC ← $+2+d ---2 2
-- JNZ rel if A<>0 then PC ← $+2+d ---2 2
-- JBC bit,rel if bit=1 then [PC ← $+3+d : bit=0] ---3 2
CJNE -- CNJE A,direct,rel if A<>direct then PC ← $+3+d *--3 2
-- CNJE A,#,rel if A<># then PC ← $+3+d *--3 2
-- CNJE Rn,#,rel if Rn<># then PC ← $+3+d *--3 2
-- CNJE @Ri,#,rel if @Ri<># then PC ← $+3+d *--3 2
DJNE -- DNJE Rn,rel Rn ← Rn - 1
if Rn<>0 then PC ← $+2+d
---2 2
-- DNJE direct,rel direct ← direct - 1
if direct<>0 then PC ← $+3+d
---3 2
CALL -- ACALL #11 SP ← SP + 1 : (SP) ← $+3[7:0]
SP ← SP + 1 : (SP) ← $+3[15:8]
PC ← PC[15:11] or #11
---2 2
-- LCALL #16 SP ← SP + 1 : (SP) ← $+2[7:0]
SP ← SP + 1 : (SP) ← $+2[15:8]
PC ← #16
---3 2
RET -- RET PC[15:8] ← (SP) : SP ← SP - 1
PC[7:0] ← (SP) : SP ← SP - 1
---1 2
-- RETI PC[15:8] ← (SP) : SP ← SP - 1
PC[7:0] ← (SP) : SP ← SP - 1
---1 2

(5) ローテイト・シフト
命令群サイズニーモニック機能 CAO命令長ステート補足
RL B- RL A rl ---1 1
RLC B- RLC A rlc *--1 1
RR B- RR A rr ---1 1
RRC B- RRC A rrc *--1 1
SWAP B- SWAP A A[7:4] ⇔ A[3:0] ---1 1

(6) ビット操作
命令群サイズニーモニック機能 CAO命令長ステート補足
CLR - CLR C CY = 0 0--1 1
- CLR bit bit = 0 ---2 1
SETB - SETB C CY = 1 1--1 1
- SETB bit bit = 1 ---2 1
CPL - CPL C C = not C *--1 1
- CPL bit bit = not bit ---2 1
ANL - ANL C,bit C = C and bit *--2 2
- ANL C,/bit C = C and [not bit] *--2 2
ORL - ORL C,bit C = C or bit *--2 2
- ORL C,/bit C = C or [not bit] *--2 2
MOV - MOV C,bit C = bit *--2 1
- MOV bit,C bit = C ---2 2

(7) 特殊演算・CPU制御
命令群サイズニーモニック機能 CAO命令長ステート補足
NOP - NOP 何もしない ---1 1


命令コードマップ

色の説明

1. 文字・背景色

実装済み
未実装
未定義命令
未定義命令・未定義

命令コード

H/L 0 1 2 3 4 5 6 7 8 9 A B C D E F
0 NOP AJMP
#11
LJMP
#16
RR
A
INC
A
INC
direct
INC
@R0
INC
@R1
INC
R0
INC
R1
INC
R2
INC
R3
INC
R4
INC
R5
INC
R6
INC
R7
1 JBC
bit,rel
ACALL
#11
LCALL
#16
RRC
A
DEC
A
DEC
direct
DEC
@R0
DEC
@R1
DEC
R0
DEC
R1
DEC
R2
DEC
R3
DEC
R4
DEC
R5
DEC
R6
DEC
R7
2 JB
bit,rel
AJMP
#11
RET RL
A
ADD
A,#
ADD
A,direct
ADD
A,@R0
ADD
A,@R1
ADD
A,R0
ADD
A,R1
ADD
A,R2
ADD
A,R3
ADD
A,R4
ADD
A,R5
ADD
A,R6
ADD
A,R7
3 JNB
bit,rel
ACALL
#11
RETI RLC
A
ADDC
A,#
ADDC
A,direct
ADDC
A,@R0
ADDC
A,@R1
ADDC
A,R0
ADDC
A,R1
ADDC
A,R2
ADDC
A,R3
ADDC
A,R4
ADDC
A,R5
ADDC
A,R6
ADDC
A,R7
4 JC
rel
AJMP
#11
ORL
direct,A
ORL
direct,#
ORL
A,#
ORL
A,direct
ORL
A,@R0
ORL
A,@R1
ORL
A,R0
ORL
A,R1
ORL
A,R2
ORL
A,R3
ORL
A,R4
ORL
A,R5
ORL
A,R6
ORL
A,R7
5 JNC
rel
ACALL
#11
ANL
direct,A
ANL
direct,#
ANL
A,#
ANL
A,direct
ANL
A,@R0
ANL
A,@R1
ANL
A,R0
ANL
A,R1
ANL
A,R2
ANL
A,R3
ANL
A,R4
ANL
A,R5
ANL
A,R6
ANL
A,R7
6 JZ
rel
AJMP
#11
XRL
direct,A
XRL
direct,#
XRL
A,#
XRL
A,direct
XRL
A,@R0
XRL
A,@R1
XRL
A,R0
XRL
A,R1
XRL
A,R2
XRL
A,R3
XRL
A,R4
XRL
A,R5
XRL
A,R6
XRL
A,R7
7 JNZ
rel
ACALL
#11
ORL
C,bit
JMP
@A+DPTR
MOV
A,#
MOV
direct,#
MOV
@R0,#
MOV
@R1,#
MOV
R0,#
MOV
R1,#
MOV
R2,#
MOV
R3,#
MOV
R4,#
MOV
R5,#
MOV
R6,#
MOV
R7,#
8 SJMP
rel
AJMP
#11
ANL
C,bit
MOVC
A,@A+PC
DIV
AB
MOV
direct,direct
MOV
direct,@R0
MOV
direct,@R1
MOV
direct,R0
MOV
direct,R1
MOV
direct,R2
MOV
direct,R3
MOV
direct,R4
MOV
direct,R5
MOV
direct,R6
MOV
direct,R7
9 MOV
DPTR,#16
ACALL
#11
MOV
bit,C
MOVC
A,@A+DPTR
SUBB
A,#
SUBB
A,direct
SUBB
A,@R0
SUBB
A,@R1
SUBB
A,R0
SUBB
A,R1
SUBB
A,R2
SUBB
A,R3
SUBB
A,R4
SUBB
A,R5
SUBB
A,R6
SUBB
A,R7
A ORL
C,/bit
AJMP
#11
MOV
C,bit
INC
DPTR
MUL
AB
MOV
@R0,direct
MOV
@R1,direct
MOV
R0,direct
MOV
R1,direct
MOV
R2,direct
MOV
R3,direct
MOV
R4,direct
MOV
R5,direct
MOV
R6,direct
MOV
R7,direct
B ANL
C,/bit
ACALL
#11
CPL
bit
CPL
C
CJNE
A,#,rel
CJNE
A,direct,rel
CJNE
@R0,#,rel
CJNE
@R1,#,rel
CJNE
R0,#,rel
CJNE
R1,#,rel
CJNE
R2,#,rel
CJNE
R3,#,rel
CJNE
R4,#,rel
CJNE
R5,#,rel
CJNE
R6,#,rel
CJNE
R7,#,rel
C PUSH
direct
AJMP
#11
CLR
bit
CLR
C
SWAP
A
XCH
A,direct
XCH
A,@R0
XCH
A,@R1
XCH
A,R0
XCH
A,R1
XCH
A,R2
XCH
A,R3
XCH
A,R4
XCH
A,R5
XCH
A,R6
XCH
A,R7
D POP
direct
ACALL
#11
SETB
bit
SETB
C
DA
A
DJNZ
direct,rel
XCHD
A,@R0
XCHD
A,@R1
DJNZ
R0,rel
DJNZ
R1,rel
DJNZ
R2,rel
DJNZ
R3,rel
DJNZ
R4,rel
DJNZ
R5,rel
DJNZ
R6,rel
DJNZ
R7,rel
E MOVX
A,@DPTR
AJMP
#11
MOVX
A,@R0
MOVX
A,@R1
CLR
A
MOV
A,direct
MOV
A,@R0
MOV
A,@R1
MOV
A,R0
MOV
A,R1
MOV
A,R2
MOV
A,R3
MOV
A,R4
MOV
A,R5
MOV
A,R6
MOV
A,R7
F MOVX
@DPTR,A
ACALL
#11
MOVX
@R0,A
MOVX
@R1,A
CPL
A
MOV
direct,A
MOV
@R0,A
MOV
@R1,A
MOV
R0,A
MOV
R1,A
MOV
R2,A
MOV
R3,A
MOV
R4,A
MOV
R5,A
MOV
R6,A
MOV
R7,A