嵌入式——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 立即寻址

  1. 定义:操作数紧跟在操作码后面,包括在指令字节中,和操作码一起存在程序存储器
  2. 例子:
    MOV A, #52H ;52H -> A
    在这里插入图片描述

3.2直接寻址

  1. 定义:指令中直接给出存储器的地址,操作数在存储器中
  2. 例子:MOV A ,52H ;(52h)->A
    在这里插入图片描述

3.3 寄存器寻址

  1. 定义:指定寄存器的名字,寄存器的内容为操作数
  2. 例子:
    MOV A, R0 ; ((R0))->A
  3. 适用范围:
    i. 4组R0-R7共32个,每次只能使用当前寄存器组的8个
    ii. 部分特殊功能的寄存器A,B,DPTR等

3.4寄存器间接寻址

规定:

  1. 片内基本RAM的低128位、高128位,间接用@R0、@R1
  2. 片外RAM(64kb):用@DPTR
  3. 片外拓展RAM:若小于256B,间接用DPTR或@R0,@R1,若大于256B,则用@DPTR

例子:
MOV DPTR ,#3456H ;3456H->DPTR
MOVX A,@DPTR ; ((DPTR))->A

3.5 变址寻址

  1. 定义:基地址(DPTR和PC预先存放操作数对应的基地址)+偏移量(累加器A预先存放对应的偏移量),作为操作数的有效地址
  2. 例子:
    MOV A, #22H ;偏移量
    MOV DPTR,#63A0H ;基地址
    MOV A,@A+DPTR ; ((A)+(DPTR))->A
    在这里插入图片描述

3.6 相对寻址

  1. 定义:相对寻址以程序计数器PC的当前值作为基地址,与指令中给出的相对偏移量rel进行相加,把所得之和作为程序的转移地址。

    目标地址 = 当前PC值 + rel = 指令存储地址 + 指令字节数 + rel

    注意事项
    i. 当前PC值是指相对转移指令的存储地址加上该指令的字节数,即相对转移指令取指结束时的值。
    ii. 偏移量rel是有符号的单字节数,以补码表示,其取值范围是-128~ +127(00H~FFH)。负数表示从当前地址向地址小的方向转移,正数表示从当前地址向地址大的方向转移。

  2. 例子:
    SJMP 08H ;PC+2+08H->PC
    在这里插入图片描述
    ps:
    a. 为什么+2,因为SJMP(占用一个字节),再取完08H是(也是一个字节)
    b. 最后拿到的200AH放进PC

3.7 位寻址

  1. 补充:
    位(bit,一位二进制码),字节(byte,8位二进制码) ,字(word,一般情况下两个字节一个字,16位)
  2. 位寻址可以理解成去除某个位的值,具体形式有以下四种
形式 例子 描述
直接使用位地址 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)的状态送进位标志位。
发布了21 篇原创文章 · 获赞 43 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/weixin_43746266/article/details/105009918