Chapter 2:指令系统
2.0 基础
- 强烈建议:观看时请配合PPT食用(理解PPT上的例题)
2.0.1 Outline
2.0.2 指令格式和常用符号
- 指令格式
- 指令中的常用符号
符号 | 含义 |
---|---|
Rn: n=(0~7) | 表示当前工作寄存器R0~R7中的一个 |
Ri: i=(0、1) | 代表R0和R1寄存器中的一个,用作间接寻址寄存器。 |
dir | 8 位直接地址(片内 RAM 和 SFR ) |
#data | 8位立即数,即8位常数。可以为2进制(B)、10进制、16进制(H)、字符(‘ ’) |
#data16 | 表示16位立即数,取值范围为:#0000H ~ #0FFFFH |
addr16 | 表示16位地址 |
addr11 | 表示11位地址 |
rel | 相对偏移量(为1字节补码)用于相对转移指令中 |
bit | 位地址,在位地址空间中 |
$ | 表示当前指令的地址 |
( ) | 用于注释中表示存储单元的内容 |
2.1 寻址方式
- 指令中提供(寻找)操作数的方式称为寻址方式。
2.1.1 立即寻址
-
指令中直接给出操作数的寻址方式称为立即寻址。
-
在 51 单片机中,立即数前面加 “#“号表示。
-
如8位数(#30H )或 16 位数(#2000H) 。
例如:
MOV A, #30H ; A←30H ,执行后 A=30H
MOV DPTR,#2000H ; DPTR ← 2000H,
2.1.2 直接寻址
- 操作数的地址直接出现在指令中。
- 寻址对象:
①内部数据存贮器:使用它的地址。
②特殊功能寄存器:既可使用它的地址,也可以直接使用寄存器名。 - 例子:
2.1.3 寄存器直接寻址
-
操作数存放在寄存器中。
-
寻址对象**:A,B,DPTR,R0~R7** 。
-
例如: MOV A,R0 ;R0→A,A、R0均为寄存器寻址。
MUL AB ;A*B→BA,A、B均为寄存器寻址。
2.1.4 寄存器间接寻址
-
操作数存放在以寄存器内容为地址的单元中。
在寄存器前加前缀标志 “@”。 -
例子:
2.1.5 变址寻址
2.1.6 相对寻址
2.1.7 位寻址
-
寻址对象:
(1)片内RAM中20H~2FH中的128个位
(2)SFR中的可位寻址的位。 -
例子:
2.2 数据传送与交换指令
-
计算机中的传送指令,实际是将源操作数的内容拷贝到目的操作数。
因此,源操作数的内容不变,而目的操作数原来的内容会被新拷贝的内容代替。
-
数据传送与交换指令类指令包括:数据传送、数据交换、堆栈操作等指令。
2.2.1 传送类指令
- 内部RAM、SFR之间的传送:MOV指令
-
总结:一共5类,从作为目的操作数的角度来理解区别的话: A除了自己不能给自己,其他都行(4个)。 dir全部都行(5个)。Rn和Ri之间不能互传,也不能给自己,其他都行(3个)。
-
判断指令正误时,不能只简单地套上面的传送逻辑,还要注意操作数本身的逻辑。
比如#data表示8位立即数——用A,#data16表示16位立即数——用DPTR。
没有@R3这个用法,只有@R0、@R1、@DPTR。
*例题见ppt
-
外部存储器和A累加器之间的传送:MOVX指令、MOVC指令
-
总图:
- 这两条指令只能用 间接寻址 or 变址寻址,不能用 直接寻址。
- 注意MOVX是双向的,MOV是单向的。
-
MOVX指令
@R0既可以用来表示内部RAM也可以表示外部RAM,取决于你的指令是MOV还是MOVX -
MOVC指令
*例子见ppt
-
-
堆栈操作指令
2.2.2 交换指令
- 实现片内RAM区的数据双向传送。
- 字节交换指令 (XCH指令中一个操作数必须是A)
- 低半字节交换指令
- A的高、低半字节交换指令
2.3 算术运算和逻辑运算指令
- 算术运算是加、减、乘、除运算。
逻辑运算是按位进行的与、或、非、异或等运算。
2.3.1 以A为目的操作数的算术、逻辑运算指令(24条)
- 加减运算指令影响标志位CY、 OV、AC 。
逻辑运算是按位进行的,因此不影响CY、OV、AC。 - 凡是指令执行结果在A累加器中,运行结果“1”的奇、偶性反映在P标志位(包括前面的传送指令和后面的移位指令)。
- 例子见ppt
2.3.2 以dir为目的操作数逻辑运算指令(6条)
2.3.3 加1、减1 指令(9条)
2.3.4 十进制调整指令
*例子见ppt
2.3.5 专对A的指令
- 取反和清0
- 移位指令 (是否带进位的 循环 左/右 移)
2.3.6 乘除法指令
2.4 控制转移指令
2.4.1 子程序调用
-
长调用
-
短调用
-
子程序返回指令
2.4.2 转移指令
-
无条件转移指令
- 短转移: AJMP addr11 ;addr11→PC0~PC10
- 长转移: LJMP addr16 ;addr16→PC0~PC15
- 间接转移:JMP @A+DPTR ;A+DPTR→PC
- 无条件相对转移:SJMP rel ;PC+rel→PC
-
条件转移指令
-
累加器为零(非零)转移:JZ rel 和 JNZ rel
-
减 1 不等于零转移:DJNZ Rn , rel 和 DJNZ dir , rel
-
比较转移指令:见下图:
-
2.4.3 空操作指令
2.5 位操作指令
2.5.1 功能、表达方式、限制
2.5.2 具体指令(7种17条,6×2+1×5)
2.6 小结
- 51系列单片机指令系统的特点是不同的存储空间寻址方式不同,适用的指令不同,必须进行区分。
- 指令是程序设计的基础,应重点掌握 传送指令、算术和逻辑运算指令、控制转移指令和位操作指令,掌握 指令的功能、操作的对象和结果,对标志位的影响等内容。