51汇编语言指令集

时间:2022-10-02 00:45:00

一、符号定义

名    称

说        明

Rn

n=0~7,R0~R7寄存器

Direct

直接地址,内部数据区的地址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位常数

#data16

16位常数

Addr16

16位的目标地址

Addr11

11位的目标地址

Rel

相关地址

bit

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

二、常用指令

2.1、算数运算指令

序号

指   令

字 节

周 期

说          明

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,  #data

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,当DPL溢出时,会使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

将A与B的值相乘,积的低字节存回A,高字节存回B,如果溢出,标志位OV=1

23

DIV   AB

1

4

将A的值除以B的值,商存回累加器,余数存回B寄存器,C=0OV=0

24

DA    A

1

1

将累加器A作十进制调整,若低4>9或(AC)=1,则低4位值加6;若高4>9或(C)=1,则高4位值加6;

2.2、逻辑运算指令

序号

指   令

字 节

周 期

说          明

25

ANL   A,  Rn

1

1

将累加器的值与寄存器的值做“与”的逻辑判断,结果存回累加器

26

ANL   A,  direct

2

1

将累加器的值与直接地址的内容做“与”的逻辑判断,结果存回累加器

27

ANL   A,  @Ri

1

1

将累加器的值与间接地址的内容做“与”的逻辑判断,结果存回累加器

28

ANL   A,  #data

2

1

将累加器的值与常数做“与”的逻辑判断,结果存回累加器

29

ANL   direct,  A

2

1

将直接地址的内容与累加器的值做“与”的逻辑判断,结果存回该直接地址

30

ANL   direct, #data

3

2

将直接地址的内容与常数值做“与”的逻辑判断,结果存回该直接地址

31

ORL   A,  Rn

1

1

将累加器的值与寄存器的值做“或”的逻辑判断,结果存回累加器

32

ORL   A,  direct

2

1

将累加器的值与直接地址的内容做“或”的逻辑判断,结果存回累加器

33

ORL   A,  @Ri

1

1

将累加器的值与间接地址的内容做“或”的逻辑判断,结果存回累加器

34

ORL   A,  #data

2

1

将累加器的值与常数做“或”的逻辑判断,结果存回累加器

35

ORL   direct,  A

2

1

将直接地址的内容与累加器的值做“或”的逻辑判断,结果存回该直接地址

36

ORL   direct, #data

3

2

将直接地址的内容与常数值做“或”的逻辑判断,结果存回该直接地址

37

XRL   A,  Rn

1

1

将累加器的值与寄存器的值做“异或”的逻辑判断,结果存回累加器

38

XRL   A,  direct

2

1

将累加器的值与直接地址的内容做“异或”的逻辑判断,结果存回累加器

39

XRL   A,  @Ri

1

1

将累加器的值与间接地扯的内容做“异或”的逻辑判断,结果存回累加器

40

XRL   A,  #data

2

1

将累加器的值与常数作“异或”的逻辑判断,结果存回累加器

41

XRL   direct,  A

2

1

将直接地址的内容与累加器的值做“异或”的逻辑判断,结果存回该直接地址

42

XRL   direct, #data

3

2

将直接地址的内容与常数的值做“异或”的逻辑判断,结果存回该直接地址

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位的内容交换

2.3、数据转移指令

序号

指   令

字 节

周 期

说          明

50

MOV A,Rn

1

1

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

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,#data

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,#data16

3

2

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

66

MOVC A,@A+DPTR

1

2

A的值加数据指针寄存器的值为其所指定地址,将该地址的内容读入累加器

67

MOVC A,@A+PC

1

2

累加器的值加程序计数器的值作为其所指定地址,将该地址的内容读入累加器

68

MOVX A,@Ri

1

2

将间接地址所指定外部存储器的内容读入累加器(8位地址)

69

MOVX A,@DPTR

1

2

将数据指针所指定外部存储器的内容读入累加器(16位地址)

70

MOVX @Ri,A

1

2

将累加器的内容写入间接地址所指定的外部存储器(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位互换

2.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与直接地址的某位做“与”的逻辑判断,结果存回进位C

85

ANL C,/bit

2

2

将进位C与直接地址的某位的反相值做“与”的逻辑判断,结果存回进位C

86

ORL C,bit

2

2

将进位C与直接地址的某位做“或”的逻辑判断,结果存回进位C

87

ORL C,/bit

2

2

将进位C与直接地址的某位的反相值做“或”的逻辑判断,结果存回进位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的相关地址

92

JNB bit,rel

3

2

若直接地址的某位为0,则跳至rel的相关地址

94

JBC bit,rel

3

2

若直接地址的某位为1,则跳至rel的相关地址,并将该位值清除为0

2.5、程序转移指令

序号

指   令

字 节

周 期

说          明

95

ACALL addr11

2

2

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

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所指的相关地址

107

CJNE @Rn,#data,rel

3

2

将寄存器的内容与常数比较,若不相等则跳至rel所指的相关地址

108

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

无动作