学而实习之 不亦乐乎

8051系列单片机汇编语言指令速查表

2023-12-17 08:48:03

编号

指令名称

指令助记符

指令说明

数据传送类指令

1

一般传送

MOV A, #data

将立即数#data送累加器A

2

MOV direct, #data

将立即数#data送片内RAM direct地址单元内

3

Mov Rn, #data

将立即数#data送寄存器Rn

4

Mov @Ri, #data

寄存器Ri内为RAM地址,将立即数#data送该地址单元内

5

Mov direct2, direct1

将direct1地址单元的数据送 direct2地址单元内

6

Mov direct, rn

将Rn的数据送 direct地址单元内

7

Mov Rn, direct

将direct地址单元内的数据送Rn寄存器

8

Mov direct, @Ri

寄存器Ri内为RAM地址,将该地址单元内的数据送direct地址单元内

9

Mov @Ri, direct

寄存器Ri内为RAM地址,将direct地址单元内的数据送该地址单元内

10

Mov A, Rn

将寄存器Rn内的数据送累加器A

11

Mov Rn, A

将累加器A内的数据送寄存器Rn

12

Mov A, direct

将direct地址单元内的数据送累加器A

13

Mov direct, A

将累加器A内的数据送direct地址单元内

14

Mov A, @Ri

寄存器Ri内为RAM地址,将该地址单元内的数据送累加器A

15

Mov @Ri , A

寄存器Ri内为RAM地址,将累加器A的数据送该地址单元内

16

目的地址传送

Mov DPTR, #data16

将16位立即数送数据指针DPTR寄存器

17

字节交换

SWAP A

累加器A高低4位数据交换

18

XCH A, Rn

将累加器A数据和寄存器Rn内的数据交换

19

XCH A, direct

将累加器A数据和direct地址单元内的数据交换

20

XCH A, @Ri

寄存器Ri内为RAM地址,将该地址单元内的数据与累加器A的数据交换

21

XCHD A, @Ri

寄存器Ri内为RAM地址,将该地址单元内的数据低4位与的低4位交换

22

与外部RAM传送

MOVX @DPTR, A

将累加器A的数据送数据指针DPTR寄存器所指外部RAM地址单元内

23

MOVX A , @DPTR

将DPTR寄存器所指外部RAM地址单元内的数据送累加器A

24

MOVX A, @Ri

寄存器Ri内为片外RAM地址,将该地址单元内的数据送累加器A

25

MOVX @Ri, A

寄存器Ri内为片外RAM地址,将该地址单元内的数据送累加器A

26

与ROM传送

MOVC A, @A+DPTR

A+DPTR构成ROM地址,将该地址内的数据送累加器A内

27

MOVC A, @A+PC

A+PC构成ROM地址,将该地址内的数据送累加器A内

28

栈操作

PUSH direct

堆栈指针SP自加1后,将direct地址单元的数据压进堆栈,

29

POP direct

堆栈的数据送direct地址单元中,后堆栈指针减1,

算术运算指令

30

加法指令

ADD A, Rn

将寄存器Rn与累加器A的数据相加后,结果保存到累加器A

31

ADD A, direct

将direct地址单元内的数据与累加器A的数据相加后结果保存到累加器A

32

ADD A, @Ri

寄存器Ri内位地址,将该地址单元内的数据与累加器A的数据相加后结果保存到累加器A

33

ADD A, #data

将立即数与累加器A的数据相加后结果保存到累加器A

34

带进位加法

ADDC A, Rn

将寄存器Rn与累加器A的数据相加,再加上进位标志内的值后,结果保存到累加器A

35

ADDC A, direct

将direct地址单元内的数据与累加器A的数据相加,再加上进位标志内的值后,结果保存到累加器A

36

ADDC A, @Ri

寄存器Ri内为RAM地址,将该地址单元内的数据与累加器A的数据相加,再加上进位标志内的值后,结果保存到累加器A

37

ADDC A, #data

将立即数与累加器A的数据相加,再加上进位标志内的值后结果保存到累加器A

38

带借位减法

SUBB A, Rn

将与累加器A的数据减去寄存器Rn的数据,再减去进位标志内的值,结果保存到累加器A

39

SUBB A, direct

将与累加器A的数据减去direct地址单元内的数据,再减去进位标志内的值,结果保存到累加器A

40

SUBB A, @Ri

寄存器Ri内为RAM地址,将累加器A的数据减去该地址单元内的数据,再减去进位标志内的值后,结果保存到累加器A

41

SUBB A, #data

将累加器A的数据减去立即数,再减去进位标志内的值后,结果保存到累加器A

42

加1指令

INC A

累加器A的值自加1

43

INC Rn

寄存器Rn的值自加1

44

INC direct

direct地址单元内值自加1

45

INC @Ri

寄存器Ri内为RAM地址,该地址单元内的值自加1

46

INC DPTR

数据指针寄存器DPTR内的值自加1

47

减1指令

DEC A

累加器A的值自减1

48

DEC Rn

寄存器Rn的值自减1

49

DEC direct

direct地址单元内的值自减1

50

DEC @Ri

寄存器Ri内为RAM地址,该地址单元内的值自减1

51

乘法

MUL AB

累加器A与寄存器B内的值相乘,乘积的高8位保存在B寄存器,低8位保存在累加器A中

52

除法

DIV AB

累加器A的值除以寄存器B的值,商保存在累加器A中,余数保存在B寄存器

53

二-十进制调整

DA A

对累加器A的结果进行十进制调整

逻辑运算指令

54

逻辑与

ANL A, Rn

将累加器A的值和寄存器Rn的值进行与操作,结果保存到累加器A中

55

ANL A, direct

将累加器A的值和direct地址单元内的值进行与操作,结果保存到累加器A中

56

ANL A, @Ri

寄存器Ri内为RAM地址,将累加器A的值和该地址单元内的值进行与操作,结果保存到累加器A中

57

ANL A, #data

将累加器A的值和立即数进行与操作,结果保存到累加器A中

58

ANL direct, A

将累加器A的值和direct地址单元内的值进行与操作,结果保存到direct地址单元内

59

ANL direct, #data

将立即数和direct地址单元内的值进行与操作,结果保存到direct地址单元内

60

逻辑或

ORL A, Rn

将累加器A的值和寄存器Rn的值进行或操作,结果保存到累加器A中

61

ORL A, direct

将累加器A的值和direct地址单元内的值进行或操作,结果保存到累加器A中

62

ORL A, @Ri

寄存器Ri内为RAM地址,将累加器A的值和该地址单元内的值进行或操作,结果保存到累加器A中

63

ORL A, #data

将累加器A的值和立即数进行或操作,结果保存到累加器A中

64

ORL direct, A

将累加器A的值和direct地址单元内的值进行或操作,结果保存到direct地址单元内

65

ORL direct, #data

将立即数和direct地址单元内的值进行或操作,结果保存到direct地址单元内

66

逻辑异或

XRL A, Rn

将累加器A的值和寄存器Rn的值进行异或操作,结果保存到累加器A中

67

XRL A, direct

将累加器A的值和direct地址单元内的值进行异或操作,结果保存到累加器A中

68

XRL A, @Ri

寄存器Ri内为RAM地址,将累加器A的值和该地址单元内的值进行异或操作,结果保存到累加器A中

69

XRL A, #data

将累加器A的值和立即数进行异或操作,结果保存到累加器A中

70

XRL direct, A

将累加器A的值和direct地址单元内的值进行异或操作,结果保存到direct地址单元内

71

XRL direct, #data

将立即数和direct地址单元内的值进行异或操作,结果保存到direct地址单元内

72

按位取反

CPL A

累加器A的值按位取反

73

累加器清零

CLR  A

累加器A清0

74

逻辑右移

RR  A

累加器A的值循环右移1位

75

逻辑左移

RL  A

累加器A的值循环左移1位

76

带进位右移

RRC  A

累加器A的值带进位循环右移1位

77

带进位左移

RLC  A

累加器A的值带进位循环左移1位

控制转移指令

78

无条件转移

SJMP rel

rel为地址偏移量,PC加2后的地址加上rel作为目标地址,程序跳到目标地址继续运行

79

AJMP addr11(a10- a0)

addr11为11位地址,PC加2后的地址高5位与指令中的低11位地址构成目标地址,程序跳到目标地址继续运行

80

LJMP addr16

将addr16的16位地址送程序计数器PC,使机器执行下一条指令时无条件转移到addr16处执行程序

81

JMP @A+DPTR

目标地址的基地址放在DPTR中,目标地址对基地址的偏移量放在累加器A中,它们相加构成目标地址

82

条件转移

JZ rel

If(累加器A=0)则PC加2再加上rel作为目标地址

83

JNZ  rel

If(累加器A!=0)则PC加2再加上rel作为目标地址

84

CJNE A, direct, rel

If(累加器A!= direct地址单元的值)则PC加2再加上rel作为目标地址

85

CJNE A, #data, rel

If(累加器A!= 立即数)则PC加2再加上rel作为目标地址

86

CJNE Rn, #data, rel

If(寄存器Rn的值!= 立即数)则PC加2再加上rel作为目标地址

87

CJNE @Ri, #data, rel

寄存器Ri内为RAM地址,If(该地址单元的值!= 立即数)则PC加2再加上rel作为目标地址

88

循环转移

DJNZ Rn, rel

寄存器Rn的值减1后,If(寄存器Rn的值!=0)则PC加2再加上rel作为目标地址

89

DJNZ direct, rel

Direct地址单元的值减1后,If(该值!=0)则PC加3再加上rel作为目标地址

90

布尔条件转移

JC  rel

If(CY=1)则PC加2再加上rel作为目标地址

91

JNC  rel

If(CY=0)则PC加2再加上rel作为目标地址

92

JB bit, rel

If(bit位=1)则PC加3再加上rel作为目标地址

93

JNB bit, rel

If(bit位=0)则PC加3再加上rel作为目标地址

94

JBC bit, rel

If(bit位=1)则PC加3再加上rel作为目标地址,且bit位清0

95

调用指令

ACALL addr11

addr11为11位地址,PC加2后的地址PUSH进堆栈,再将PC的地址高5位与指令中的低11位地址构成目标地址,程序跳到目标地址继续运行

96

LCALL  addr16

PC加3后的地址PUSH进堆栈,再将16位地址送PC作为目标地址,程序跳到目标地址继续运行

97

返回指令

RET

子程序返回指令,把堆栈中的地址恢复到PC中使程序回到调用处

98

RETI

中断程序返回指令,把堆栈中的地址恢复到PC中使程序回到调用处

99

空操作

NOP

空操作

位操作指令

100

布尔传送

MOV C, bit

将bit位地址中的值送PSW中的进位标志位CY

101

MOV bit, C

将PSW中的进位标志位CY的值送bit位地址中

102

位清0

CLR  C

将进位标志位CY清0

103

位清0

CLR  bit

将bit位地址内清0

104

位置1

SETB C

将进位标志位CY置1

105

SETB bit

将bit位地址内置1

106

位与

ANL C, bit

将Cy和bit位地址中的值进行与操作后,结果送Cy

107

ANL C, /bit

bit位地址中的值取反后再与Cy进行与操作,结构送Cy

108

位或

ORL C, bit

将Cy和bit位地址中的值进行或操作后,结果送Cy

109

ORL C, /bit

bit位地址中的值取反后再与Cy进行或操作,结构送Cy

110

位取反

CPL  C

将Cy取反

111

CPL  bit

将bit位地址的值取反

说明:Ri, Rn指当前工作寄存器,i,n = 0-7,当前工作寄存器由程序状态字寄存器PSW的2个位RS1, RS0决定