文档视界 最新最全的文档下载
当前位置:文档视界 › C51汇编语言指令集

C51汇编语言指令集

C51汇编语言指令集
C51汇编语言指令集

51汇编语言指令集一、符号定义表

符号含义Rn R0~R7寄存器n=0~7

Direc t 直接地址,内部数据区的地址RAM(00H~7FH)

SFR(80H~FFH) B,ACC,PSW,IP,P3,IE,P2,SCON,P1,TCON,P0

@Ri 间接地址Ri=R0或R1 8051/31RAM地址(00H~7FH) 8052/32RAM地址(00H~

FFH)

#data 8位常数

#data1

6

16位常数

Addr16 16位的目标地址

Addr11 11位的目标地址

Rel 相关地址

bit 内部数据RAM(20H~2FH),特殊功能寄存器的直接地址的位

二、指令介绍

指令字

节周

动作说明

算数运算指令

1.ADD A,Rn 1 1 将累加器与寄存器的内容相加,结果

存回累加器

2.ADD A,direct 2 1 将累加器与直接地址的内容相加,结

果存回累加器

3.ADD A,@Ri 1 1 将累加器与间接地址的内容相加,结

果存回累加器

4.ADD A,#data 2 1 将累加器与常数相加,结果存回累加

5.ADDC A,Rn 1 1 将累加器与寄存器的内容及进位C相

加,结果存回累加器

6.ADDC A,direct 2 1 将累加器与直接地址的内容及进位C

相加,结果存回累加器

7.ADDC A,@Ri 1 1 将累加器与间接地址的内容及进位C

相加,结果存回累加器

8.ADDC A,#data 2 1 将累加器与常数及进位C相加,结果

存回累加器

9.SUBB A,Rn 1 1 将累加器的值减去寄存器的值减借

位C,结果存回累加器

10.SUBB A,direct 2 1 将累加器的值减直接地址的值减借

位C,结果存回累加器

11.SUBB

A,@Ri

1 1 将累加器的值减间接地址的值减借

位C,结果存回累加器

12.SUBB

A,0data

2 1 将累加器的值减常数值减借位C,结

果存回累加器

13.INC A 1 1 将累加器的值加1

14.INC Rn 1 1 将寄存器的值加l

15.INC

direct

2 1 将直接地址的内容加1

16.INC

@Ri

1 1 将间接地址的内容加1

17.INC

DPTR

1 1 数据指针寄存器值加1

说明:将16位的DPTR加1,当DPTR的低字节(DPL)

从FFH溢出至00H时,会使高字节(DPH)加1,不影响

任何标志位

18.DEC A 1 1 将累加器的值减1

19.DEC Rn 1 1 将寄存器的值减1

20.DEC direct 2 1 将直接地址的内容减1

21.DEC

@Ri

1 1 将间接地址的内容减1

22.MUL AB 1 4 将累加器的值与B寄存器的值相

乘,乘积的低位字节存回累加器,

高位字节存回B寄存器

说明:将累加器A和寄存器B内的无符号整数相乘,产生

16位的积,低位字节存入A,高位字节存入B寄存器。如

果积大于FFH,则溢出标志位(OV)被设定为1,而进位

标志位为0

23.DI

V AB

1 4 将累加器的值除以B寄存器的值,结果

的商存回累加器,余数存回B寄存器

说明:无符号的除法运算,将累加器A除以B寄存器的值,

商存入A,余数存入B。执行本指令后,进位位(C)及溢出

位(OV)被清除为0

24.DA

A

1 1 将累加器A作十进制调整,

若(A) 3-0>9或(AC)=1,则(A)

3-0←(A)3-0+6

若(A) 7-4>9或(C)=1,则(A)

7-4←(A)7-4+6

逻辑运算指令

ANL

A,Rn

1 1 将累加器的值与寄存器的值做AND的逻

辑判断,结果存回累加器

ANL

A,direc

t

2 1 将累加器的值与直接地址的内容做AND

的逻辑判断,结果存回累加器

ANL 1 1 将累加器的值与间接地址的内容做AND

A,@Ri 的逻辑判断,结果存回累加器

ANL A,#data 2 1 将累加器的值与常数做AND的逻辑判

断,结果存回累加器

ANL direct, A 2 1 将直接地址的内容与累加器的值做AND

的逻辑判断,结果存回该直接地址

ANL direct,#data 3 2 将直接地址的内容与常数值做AND

的逻辑判断,结果存回该直接地址

ORL A,Rn 1 1 将累加器的值与寄存器的值做OR的

逻辑判断,结果存回累加器

32.ORL A,direct 2 1 将累加器的值与直接地址的内容做

OR的逻辑判断,结果存回累加器

33.ORL A,@Ri 1 1 将累加器的值与间接地址的内容做

OR的逻辑判断,结果存回累加器

34.ORL A,#data 2 1 将累加器的值与常数做OR的逻辑判

断,结果存回累加器

35.ORL direct,A 2 1 将直接地址的内容与累加器的值做

OR的逻辑判断,结果存回该直接地址

36.ORL direct,#dat a 3 2 将直接地址的内容与常数值做OR的

逻辑判断,结果存回该直接地址

37.XRL A,Rn 1 1 将累加器的值与寄存器的值做XOR的

逻辑判断,结果存回累加器

38.XRL A,direct 2 1 将累加器的值与直接地址的内容做

XOR的逻辑判断,结果存回累加器

39.XRL A,@Ri 1 1 将累加器的值与间接地扯的内容做

XOR的逻辑判断,结果存回累加器

40.XRL A,#data 2 1 将累加器的值与常数作XOR的逻辑判

断,结果存回累加器

XRL direct, A 2 1 将直接地址的内容与累加器的值做XOR

的逻辑判断,结果存回该直接地址

42.XRL direct,#dat a 3 2 将直接地址的内容与常数的值做XOR

的逻辑判断,结果存回该直接地址

43.CLR A 1 1 清除累加器的值为0 44.CPL A 1 1 将累加器的值反相45.RL A 1 1 将累加器的值左移一位46.RLC A 1 1 将累加器含进位C左移一位47.RR A 1 1 将累加器的值右移一位48.RRC A 1 1 将累加器含进位C右移一位

49.SWAP A 1 1 将累加器的高4位与低4位的内容交

换。(A)3-0←(A)7-4

数据转移指令

50.MOV 1 1 将寄存器的内容载入累加器A,Rn

51.MOV

A,direct

2 1 将直接地址的内容载入累加器

52.MOV

A,@Ri

1 1 将间接地址的内容载入累加器

53.MOV

A,#data

2 1 将常数载入累加器

54.MOV

Rn,A

1 1 将累加器的内容载入寄存器

55.MOV

Rn,direct

2 2 将直接地址的内容载入寄存器

56.MOV

Rn,gdata

2 1 将常数载入寄存器

57.MOV

direct,A

2 1 将累加器的内容存入直接地址

58.MOV

direct,Rn

2 2 将寄存器的内容存入直接地址

59.MOV

direct1,

direct2

3 2 将直接地址2的内容存入直接地址

1

60.MOV

direct,@Ri

2 2 将间接地址的内容存入直接地址

61.MOV

direct,#data

3 2 将常数存入直接地址

62.MOV

@Ri,A

1 1 将累加器的内容存入某间接地址

63.MOV

@Ri,direct

2 2 将直接地址的内容存入某间接地

64.MOV

@Ri,#data

2 1 将常数存入某间接地址

65.MOV

DPTR,#data

16

3 2 将16位的常数存入数据指针寄存

66.MOVC

A,@A+DPT

R

1 2 (A) ←((A)+(DPTR))

累加器的值再加数据指针寄存器

的值为其所指定地址,将该地址的

内容读入累加器

67.MOV

C

A,@A+PC

1 2 (PC)←(PC)+1;(A)←((A)+(PC))累加器

的值加程序计数器的值作为其所指定

地址,将该地址的内容读入累加器68.MOVX

A,@Ri

1 2 将间接地址所指定外部存储器的

内容读入累加器(8位地址) 69.MOVX

A,@DPTR

1 2 将数据指针所指定外部存储器的

内容读入累加器(16位地址) 70.MOVX 1 2 将累加器的内容写入间接地址所

@Ri,A 指定的外部存储器(8位地址)

71.MOVX @DPTR,A 1 2 将累加器的内容写入数据指针所

指定的外部存储器(16位地址)

72.PUSH

direct

2 2 将直接地址的内容压入堆栈区

73.POP

direct

2 2 从堆栈弹出该直接地址的内容

74.XCH A,Rn 1 1 将累加器的内容与寄存器的内容

互换

75.XCH A,direct 2 1 将累加器的值与直接地址的内容

互换

76.XCH A,@Ri 1 1 将累加器的值与间接地址的内容

互换

77.XCHD A,@Ri 1 1 将累加器的低4位与间接地址的低

4位互换

布尔代数运算

78.CLR C 1 1 清除进位C为0 79.CLR bit 2 1 清除直接地址的某位为0 80.SETB C 1 1 设定进位C为1 81.SETB bit 2 1 设定直接地址的某位为1 82.CPL C 1 1 将进位C的值反相83.CPL bit 2 1 将直接地址的某位值反相

84.ANL C,bit 2 2 将进位C与直接地址的某位做AND的

逻辑判断,结果存回进位C

85.ANL C,/bit 2 2 将进位C与直接地址的某位的反相值

做AND的逻辑判断,结果存回进位C

86.ORL C,bit 2 2 将进位C与直接地址的某位做OR的

逻辑判断,结果存回进位C

87.ORL C,/bit 2 2 将进位C与直接地址的某位的反相值

做OR的逻辑判断,结果存回进位C

88.MOV

C,bit

2 1 将直接地址的某位值存入进位C

89.MOV

bit,C

2 2 将进位C的值存入直接地址的某位90.JC rel 2 2 若进位C=1则跳至rel的相关地址91.JNC rel 2 2 若进位C=0则跳至rel的相关地址

92.JB bit,rel 3 2 若直接地址的某位为1,则跳至rel的

相关地址

93.JNB bit,rel 3 2 若直接地址的某位为0,则跳至rel的

相关地址

94.JBC bit,rel 3 2 若直接地址的某位为1,则跳至rel的

相关地址,并将该位值清除为0

程序跳跃

95.ACALL addr11 2 2 调用2K程序存储器范围内的子程序

96.LCALL

addr16

3 2 调用64K程序存储器范围内的子程序

97.RET 1 2 从子程序返回

98.RETI 1 2 从中断子程序返回

99.AJMP

addr11

2 2 绝对跳跃(2K内)

100.LJMP

addr16

3 2 长跳跃(64K内)

101.SJMP

rel

2 2 短跳跃(2K内)-128~+127字节

102.JMP

@A+DPTR

1 2 跳至累加器的内容加数据指针所指

的相关地址

103.JZ rel 2 2 累加器的内容为0,则跳至rel所指相

关地址

104.JNZ

rel

2 2 累加器的内容不为0,则跳至rel所指

相关地址

105.CJNE

A,direct,rel

3 2 将累加器的内容与直接地址的内容

比较,不相等则跳至rel所指的相关地

106.CJNE

A,#data,rel

3 2 将累加器的内容与常数比较,若不相

等则跳至rel所指的相关地址

CJNE

@Rn,

#data,rel

3 2 将寄存器的内容与常数比较,若不相

等则跳至rel所指的相关地址

CJNE @Ri,

#data,rel

3 2 将间接地址的内容与常数比较,若不

相等则跳至rel所指的相关地址

109.DJNZ

Rn,rel

2 2 将寄存器的内容减1,不等于0则跳至

rel所指的相关地址

110.DJNZ

direct,rel

3 2 将直接地址的内容减1,不等于0则跳

至rel所指的相关地址

111.NOP 1 1 无动作

符号地址功能介绍

B F0H B寄存器

ACC E0H 累加器

PSW D0H 程序状态字

IP B8H 中断优先级控制寄存器

P3 B0H P3口锁存器

IE A8H 中断允许控制寄存器

P2 A0H P2口锁存器

SBUF 99H 串行口锁存器

SCON 98H 串行口控制寄存器

P1 90H P1口锁存器

TH1 8DH 定时器/计数器1(高8位)

TH0 8CH 定时器/计数器1(低8位)

TL1 8BH 定时器/计数器0(高8位)

TL0 8AH

定时器/计数器0(低8位)

TMOD 89A 定时器/计数器方式控制寄

存器

TCON 88H 定时器/计数器控制寄存器DPH 83H 数据地址指针(高8位)DPL 82H 数据地址指针(低8位)SP 81H 堆栈指针

P0 80H P0口锁存器

PCON 87H 电源控制寄存器

CY(PSW.7)——进位标志位。

AC(PSW.6)——辅助进位(或称半进位)标志。

F0(PSW.5)——由用户定义的标志位。RS1(PSW.4)、RS0(PSW.3)——工作寄存器组选择位。

OV(PSW.2)——溢出标志位。由硬件置位或清零。

PSW.1——未定义位。

P(PSW.0)——奇偶标志位。

P3.

RXD 串行口输入端P3.

1

TXD 串行口输出端

P3. 2 INT

外部中断0请求输入端,低电平有效

P3. 3 INT

1

外部中断1请求输入端,低电平有效

P3.

4

T0 定时器/计数器0计数脉冲输入端P3.

5

T1 定时器/计数器1计数脉冲输入端

P3. 6 WR

外部数据存储器写选通信号输出端,

低电平有效

P3. 7 RD

外部数据存储器读选通信号输出端,

低电平有效

位寻址区

20H~2FH单元是位寻址区。这16个单元(共计16×8=128位)的每一位都赋予了一个位地址,位地址范围为00H~7FH。位寻址区的每一位都可当作软件触发器,由程序直接进行位处理。通常可以把各种程序状态标志、位控制变量存于位寻址区内。

相关文档