目录
一、概念
- 指令:计算机能够识别和执行,用于控制各功能部件完成某一特定动作的命令
- 指令系统:所有指令的集合构成该类计算机的指令系统
- 助记符:便于人们记忆、并能描述指令功能和指令运算元的符号
二、指令格式
- 格式:
[标号: ] 操作码 [目的操作数,] [源操作数] [; 注释]
- 标号和注释可以没有
- 根据指令,操作数为0、1、2或3
- 注释内容不参与程序的汇编
- 指令中常用缩写符号及意义
1 |
#data |
8位立即数 |
2 |
#data16 |
16位立即数 |
3 |
Rn |
工作寄存器,R0~R7,n=0~7 |
4 |
Ri |
工作寄存器,i=0或1,可作为间接寻址寄存器的2个寄存器 |
5 |
@ |
间接地址符号,@Ri指寄存器Ri间接寻址 |
6 |
direct |
8位直接地址,可以是特殊功能寄存器SFR的地址或内部数据存储器单元地址 |
7 |
addr11 |
11位目的地址,用于AJMP和ACALL指令,均在2KB地址范围内转移或调用 |
8 |
addr16 |
16位目的地址,用于LJMP和LCALL指令,可在64KB地址范围内转移或调用 |
9 |
rel |
有符号的8位偏移地址,主要用于所有的条件转移指令和SJMP指令,其范围是相对于下一条指令的第一字节地址,再偏移-128~+127字节 |
10 |
bit |
位地址,片内RAM中的可寻址位和专用寄存器中的可寻址位 |
11 |
/ |
位操作的前缀,表示对该位操作数取反,如:/bit |
12 |
$ |
当前指令存放的地址 |
13 |
(X) |
表示由X所指定的某寄存器或某单元中的内容 |
14 |
((X)) |
表示由X间接寻址单元中的内容 |
15 |
B |
通用寄存器,常用于乘法MUL和除法DIV的指令 |
16 |
C |
进位标志位或者布尔处理器中的累加器(功能复用,看是否做加减运算) |
17 |
<- | 表示指令的操作结果是将箭头右边的内容传送到左边 |
三、寻址方式
- 寻址方式:在指令中说明操作数所在地址的方法。一条指令的运行,需要寻址操作数或者从操作数所在地址寻找到本指令有关的操作数,即寻址方式。
序号 |
寻址方式 |
寻址空间范围 |
1 |
寄存器寻址 |
R0~R7,A,B,Cy,DPTR寄存器 |
2 |
立即寻址 |
程序存储器 |
3 |
寄存器间址 |
内部RAM的00H~FFH,外部RAM |
4 |
直接寻址 |
内部RAM的00H~7FH,SFR |
5 |
变址寻址 |
程序存储器 |
6 |
相对寻址 |
程序存储器 |
7 |
位寻址 |
内部RAM的20H~2FH的128位,SFR中的93位 |
1. 立即寻址
- 指令直接给出操作数,立即操作数用前面有#的8位或16位数表示
- 立即数只能用作源操作数
- 主要用于对特殊功能寄存器SFR和指定的存储单元赋初值
MOV A, #60H ; (A) <- 60H
MOV DPTR, #3400H ; (DPTR) <- 3400H
MOV 30H, #40H ; (30H) <- 40H
2. 直接寻址
- 指令中直接给出操作数所在的存储单元的地址号,该地址为操作数所在的字节地址或位地址
- 可以直接使用由符号名称所表示的地址,即符号地址
- 可访问3种地址空间:
- 特殊功能寄存器:直接寻址是唯一的访问方式
- 内部RAM低128B(00H~7FH)
- 221个位地址空间
MOV A, 40H ; (A) <- (40H)
3. 寄存器寻址
- 操作数存放于寄存器(Rn、ACC、B、DPTR、Cy)中
MOV A, R7 ; (A) <- (R7)
4. 寄存器间接寻址
- 由指令指出某个寄存器的内容作为操作数地址
- 使用所选定寄存器中的R0和R1作为地址指针(堆栈操作时,使用堆栈指针SP),寻址片内RAM中的256个单元
- 也可访问外部RAM
MOV A, R0 ; (A) <- (R0)
MOV A, @R0 ; (A) <- ((R0))
- R0~R7中,只有R0和R1可以作为间接寻址寄存器使用,R2~R7只能作为普通的R寄存器使用
5. 变址寻址
- 基址寄存器(DPTR和PC)与变址寄存器(A)的内容相加,作为操作数的地址,实现对程序存储器的访问
- 由于程序存储器是只读的,变址寄存器只有读操作而无写操作,指令助记符采用MOVC
- 51系列单片机的变址寻址指令只有3条:
MOVC A, @A+DPTR ; (A) <- ((A)+(DPTR)), 更常用
MOVC A, @A+PC ; (A) <- ((A)+(PC))
JMP @A+DPTR ; (PC) <- ((A)+(DPTR))
6. 相对寻址
以当前程序计数器PC的内容为基础,加上指令给出的1个字节补码(偏移量)形成新的PC值
7. 位寻址
- 51系列单片机具有位寻址功能,即指令中直接给出位地址,可以对内部RAM中的位寻址区的128位和部分特殊寄存器SFR中的相关位进行寻址,并且位操作指令可对可寻址的每一位进行传送及逻辑操作
- 位寻址只能对有位地址的单元作位寻址操作
- 位寻址其实是一种直接寻址方式,不过其地址是位地址,只能用在位操作指令中
SETB PSW.3 ; (PSW.3) <- 1
四、指令分类
- 51系列单片机的指令系统共有111条指令
- 按照指令功能分类:
- 数据传送类指令(29条)
- 算术传送类指令(24条)
- 逻辑运算类指令(24条)
- 位操作类指令(17条)
- 控制转移类指令(17条)
- 按照指令执行所需要的时间分类:——机器周期
- 单周期指令(64条)
- 双周期指令(45条)
- 四周期指令(2条):乘、除两条指令
- 按照指令所占的字节数分类:
- 单字节指令(49条)
- 双字节指令(46条)
- 三字节指令(16条)