当前位置:
文档之家› 51单片机汇编语言指令教程(校对版)
51单片机汇编语言指令教程(校对版)
类似的还有累加器A:
INC A
寄存器寻址方式(单字节);
INC ACC 直接寻址方式(双字节);
INC 0E0H 直接寻址方式(双字节)。
3,在指令系统中:字节地址与位地址是完全不同的概念。 前者用direct表示,而后者用bit 表示,但在指令中都是用 16进制表示的数。 如:
MOV A,20H ;将RAM的20H单元内容送A MOV C,20H ;将位寻址区中的位地址为20H位内容送
1 1 1 0 1 r r r E8H~EFH
MOV A,Rn
操作码 寄存器代码
2.2.2 直接寻址
指令本身含有操作数的8位或16位地址。既指令直接给 出了操作数的地址。如:
MOV A,30H ;将RAM30H单元内容送累加器 这里30H是操作数在RAM中的地址。 很明显,直接寻址的指令长度是两个或三个字节。
变址指令只适用于对ROM存储器得访问,如查表等。
【举例】:已知ROM中0302H 单元有一个数x,现要把它送到 累加器A中,试编程。
MOV DPTR,#0300H ;立即数送DPTR
MOV A,#02H
;立即数送累加器A
MOVC A,@A+DPTR ;从ROM的00302单元取数送A
变址寻址示意图
03
02
01
00
返回前一次
2.2.3立即寻址
指令本身直接含有所需要的8位或16位的操作数。
将此数称为“立即数”(使用#标明)。如:
MOV A,#30H
;将(8位)立即数送累加器A
MOV DPTR,#2000H ;16位立即数送DPTR积存器
【注意】:MOV A,#30H MOV A,30H 两者的区别。 立即数寻址的指令长度为2或3个字节。
无操作数:如 INC DPTR 10100011B
INC A
00000100B
【特点】:操作数隐含在操作码中。
含有操作数寄存器名称的单字节指令:
如:MOV A,R0
1110100】:寄存器名以三位数代码的形式在指令的后三位。
双字节指令(46条):
指令的操作码和操作数各占一个字节。 如:
ROM n 74H n+1 30H
累加器A
返回
MOV A,#30H 指令执行流程
DPTR
ROM
90H 20H 00H
MOV DPTR,#2000H指令的存储和执行
2.2.4 寄存器间接寻址
指令中含有保存操作数地址的寄存器Ri。 MOV A,@Ri ( i=0、1)
CPU首先根据指令中寄存器名Ri找到操作数地址,然后再 从该地址中找到操作数 x。 如:MOV R0,#30H ;立即数送R0寄存器
“机器码”后才能为CPU所识别和执行。 3,三种不同的表示方法适用于不同的场合。
本章内容都以汇编的形式介绍指令系统。
2.1.3 指令的字节数
在MCS-51单片机的指令系统中,因指令操作码和操作数 的不同,指令(在存储器中)长度也各不相同。
分为单字节、双字节和三字节。
单字节指令(49条):分无操作数、有操作数两种。
三字节指令在存储器中存放的方式示意图
指令的字节数与指令的运行时间
指令的字节多是否意味着指令周期就长?
指令
字节数 周期数
MOV A,R0
1
1
MOV A,#0FFH 2
1
MOV 20H,#30H 3
2
MUL AB
1
4
INC DPTR
1
1
指令说明 R0内容送累加器A
立即数FFH送A 立即数30H送内存20h单元
特点: 能被CPU直接识别、运行的形式。也称机器码、汇编语 言的目标代码。
缺点:不便于阅读、记忆和调试修改。
2,十六进制表示方式: 它是对二进制形式的一种简化。
00100100B
24H
00001000B
08H
二进制表示的形式 十六进制表示的形式
在实验室等少数环境下,可以将这种形式作为输入程序 的一种辅助手段。但是,这种形式的指令格式必须由对应 的监控程序把它们翻译成二进制的“机器码”后存入程序 存储器并运行。
累加器A 02H
ALU
DPTR 0300H
0300H + 02H
MOV IE,#00H ;初始化中断允许寄存器 MOV TH1,#0FEH ;为定时器1赋初值 尽管使用SFR的寄存器名称来取代直接地址,可以带 来程序的可读性,但是在汇编时,仍要将寄存器名字转换 为直接地址。
2,当直接地址时在工作寄存器区中时,可以使用两种寻址 方式来访问。 如:
MOV A,00H ;将RAM中00H单元数据送累加器A
程序ROM
累加器A
数据RAM
n
OP
n+1
30H
30H 操作数x
直接寻址示意图
使用直接寻址应注意的三个问题:
1,指令助记符中direct是用16进制数表示的操作数地址。 当地址恰好在SFR区域时,指令也可以用寄存器名来表示。 如:
MOV A,80H 可以写成 MOV A,P0 后者用SFR中寄存器的名字取代它的物理地址80H。 很明显,后者更容易阅读和交流,所以我们提倡使用SFR 中寄存器名称来代替直接地址。 如:MOV A,SBUF ;串口数据缓冲器数据送A
或者:指令中分别包含1个字节的操作数和1个字节的操作 数地址。如:
MOV direct,#data 举例:MOV 20H,#0FFH
10010000 data15-8 data8-0
MOV direct,#data MOV dptr,#data16
OP (75H) direct (20H) data (FFH)
MOV A,#data
01110100B data
很明显:8位的操作数本身占据一个字节。
程序存储器
n 01110100 n+1 data
mov a,#data
双字节指令在程序存储器的存放示意图
三字节指令(16条):
指令中的操作数为双字节。如:
MOV DPTR,#data16 1001000B,data15-8,data7-0
3,指令的“助记符”方式(也称“汇编格式”):
00100100B 00001000B
24H 08H ADD A,#08H
二进制表示形式 十六进制表示
汇编格式
1,这是一种由英文单词或字母、数字来表征指令功能的 形式。是一种便于阅读、书写和交流的表示形式。
2,这种 “汇编”格式的指令必须把它“翻译”为二进制 形式
5,位操作指令:位传送、位置位、位运算和位控制转移等 操作。 【 特点】:按位操作而不是按字节的操作。位控转移的判 断不是检测某一个字节而是对某一个位进行检测并决定是 否进行程序转移。 这类指令基本不影响PSW的内容。
2.2 寻址方式
在指令的操作数位置上,用于表征、寻找操作数的方式定义 为“寻址方式”。
PSW 中的Cy中。
片内 RAM(20H-2FH)中的位寻址区结构图
2FH 7F
7E
7D
7C
7B
7A
79
78
77
76
75
74
73
72
71
70
6F
6E
6D
6C
6B
6A
69
68
67
66
65
64
63
62
61
60
5F
5E
5D
5C
5B
5A
59
58
57
56
55
54
53
52
51
50
字节地址
4F
4E
4D
4C
4B
4A
正确的理解、掌握寻址方式,是学习、使用指令的关键。
在MCS-51单片机中,共使用了七种寻址方式。 它们分别是:
1,寄存器寻址 2,直接寻址 3,立即数寻址 4,寄存器间接寻址
5,变址寻址; 6,相对寻址; 7,位寻址。
2.2.1寄存器寻址
当所需要的操作数在内部某一个寄存器Rn中时,将此寄存器 名Rn直接写在指令的操作数的位置上。如:
49
48
47
46
45
44
43
42
41
40
3F
3E
3D
3C
3B
3A
39
38
37
26
25
24
23
22
21
20
2F
2E
2D
2C
2B
2A
29
28
24H
27
26
25
24
23
22
21 20 位地址
1F
1E
1D
1C
1B
1A
19
18
17
16
15
14
13
12
11
10
0F
0E
0D
0C
0B
0A
09
08
20H
07
06
05
04
3,间址方式的指令不能访问SFR中的单元。如下面的程序 是错误的: MOV R1,#80H MOV A,@R1 (因为80H为SFR的物理地址)
MCS-51 片内 、片外 数据存储器示意图
FFH 特殊功能 寄存器 SFR
80H 7FH
通用数据 存储器
00H
片内数据存储器 256B个字节
FFFFH
注意:
MOV A,R7 ;将寄存器R7中的内容送累加器A中。
MOV 20H,R0 ;将寄存器R0中的数据送内存20H单元