MCS-51单片机指令系统-寻址方式
1. 指令系统的定义
- 指令是规定计算机完成一个特定功能的命令
- 程序是一系列指令
- MCS-51单片机设有传送、算术运算、逻辑运算、控制转移、位操作共5类111条指令
- 用户可以通过立即寻址、寄存器寻址、寄存器间接寻址、直接寻址、变址寻址、相对寻址、位寻址等7种寻址方式规定操作数
2. 单片机指令
2.1 单片机指令格式
标号:操作码助记符 目标操作数 ,源操作数 ;注释
例子:
MAIN:MOVE A ,#10H ;将10H放进去累加器
2.2 单片机常用的符号
符号 | 功能 |
---|---|
A(ACC) | 累加器 |
B | 专用寄存器,用于乘法和除法指令 |
C | 进位标志或进位位,或布尔处理机中的累加器 |
DPTR | 数据指针,可用作十六位地址寄存器 |
Rn(0~7) | 当前寄存器组的八个工作寄存器R0~R7,由PSW中的RS1和RS0决定当前使用 |
Ri(0,1) | 可用于间接寻址的两个寄存器 |
# | 立即数前缀符号 |
@ | 间接寻址中工作寄存器的前缀符号 |
(X) | X单元中的内容 |
$ | 表示当前指令的地址 |
/ | 对该位操作数取反,但不影响该位的原值 |
3. 寻址方式
3.0 先上总结:
3.0.1 各种寻址方式
寻址方式 | 利用的变量 | 寻址空间 | 补充说明 |
---|---|---|---|
立即寻址 | #data | 程序寄存器 | 直接取指令后面的操作数 |
直接寻址 | direct | 片内RAM低128B和SFR | 直接取出该地址里面的东西 |
寄存器寻址 | R0~R7,A,B,DPTR | 工作寄存器和部分SFR | 直接取寄存器里面的东西 |
寄存器间接寻址 | @R0,@R1,@DPTR | 片内RAM、片外RAM | 取寄存器所存地址里面的东西 |
变址寻址 | @A+PC,@A+DPTR | 程序存储器 | 取两个寄存器内容相加后的地址里面的东西 |
相对寻址 | @PC+偏移量 | 程序存储器 | 取PC偏移之后的地址对应的内容 |
位寻址 | bit | 片内位寻址和部分SFR | 取一个位上的内容 |
3.0.2 存储空间以及对应的寻址方式
存储空间 | 寻址方式 |
---|---|
内部00H-1FH工作寄存器 | 寄存器,直接,间接 |
内部20H-2FH位空间 | 位,直接,间接 |
内部30H-7FH用户RAM | 间接 |
内部80H-FFH用户RAM | 间接 |
内部80H-FFH特许功能寄存器SFT | 直接,为(部分) |
外部RAM | 间接 |
外部ROM程序存储器 | 变址,相对 |
3.1 立即寻址
- 定义:操作数紧跟在操作码后面,包括在指令字节中,和操作码一起存在程序存储器
- 例子:
MOV A, #52H ;52H -> A
3.2直接寻址
- 定义:指令中直接给出存储器的地址,操作数在存储器中
- 例子:MOV A ,52H ;(52h)->A
3.3 寄存器寻址
- 定义:指定寄存器的名字,寄存器的内容为操作数
- 例子:
MOV A, R0 ; ((R0))->A - 适用范围:
i. 4组R0-R7共32个,每次只能使用当前寄存器组的8个
ii. 部分特殊功能的寄存器A,B,DPTR等
3.4寄存器间接寻址
规定:
- 片内基本RAM的低128位、高128位,间接用@R0、@R1
- 片外RAM(64kb):用@DPTR
- 片外拓展RAM:若小于256B,间接用DPTR或@R0,@R1,若大于256B,则用@DPTR
例子:
MOV DPTR ,#3456H ;3456H->DPTR
MOVX A,@DPTR ; ((DPTR))->A
3.5 变址寻址
- 定义:基地址(DPTR和PC预先存放操作数对应的基地址)+偏移量(累加器A预先存放对应的偏移量),作为操作数的有效地址
- 例子:
MOV A, #22H ;偏移量
MOV DPTR,#63A0H ;基地址
MOV A,@A+DPTR ; ((A)+(DPTR))->A
3.6 相对寻址
-
定义:相对寻址以程序计数器PC的当前值作为基地址,与指令中给出的相对偏移量rel进行相加,把所得之和作为程序的转移地址。
目标地址 = 当前PC值 + rel = 指令存储地址 + 指令字节数 + rel
注意事项:
i. 当前PC值是指相对转移指令的存储地址加上该指令的字节数,即相对转移指令取指结束时的值。
ii. 偏移量rel是有符号的单字节数,以补码表示,其取值范围是-128~ +127(00H~FFH)。负数表示从当前地址向地址小的方向转移,正数表示从当前地址向地址大的方向转移。 -
例子:
SJMP 08H ;PC+2+08H->PC
ps:
a. 为什么+2,因为SJMP(占用一个字节),再取完08H是(也是一个字节)
b. 最后拿到的200AH放进PC
3.7 位寻址
- 补充:
位(bit,一位二进制码),字节(byte,8位二进制码) ,字(word,一般情况下两个字节一个字,16位) - 位寻址可以理解成去除某个位的值,具体形式有以下四种
形式 | 例子 | 描述 |
---|---|---|
直接使用位地址 | MOV C,0D5H | 将PSW的位5(位地址D5H)的状态送进位标志位。 |
单元地址加上位序号 | MOV C, 0D0H.5 | 将PSW(单元地址0D0H)的位5(位地址D5H)的状态送进位标志位。 |
特殊功能寄存器加上序号 | MOV C, PSW.5 | ;将PSW的位5的状态送进位标志位。 |
位名称表示形式 | MOV C, F0 | ;将PSW的位5(位地址D5H、位名称为F0)的状态送进位标志位。 |