单片机基础:对单片机指令系统中七种寻址方式的理解

1.立即寻址

立即寻址就是不寻址,直接把被操作的数据(立即数)写在指令当中。在指令代码中,需要在立即数前面加上 #,表示立即寻址。

例如:把数据40H传送到累加器ACC中。

指令
在这里插入图片描述
Debug
执行第三步程序时,寄存器A内数据变为十六进制0x40。
在这里插入图片描述

2.直接寻址

直接寻址就是将被操作的数据在存储器中的地址写在指令代码当中。也就是将操作数的地址写在指令当中。
例如:地址40H中的数据为5BH,将40H中的数据传入累加器ACC中。
指令
在这里插入图片描述
这条指令中的40H,与立即寻址中的#40H意义不同,这里的40H表示数据#5BH的地址。
Debug
在这里插入图片描述
单步执行到第4行指令时,累加器中的数据变为0x5b。

3.寄存器寻址

寄存器寻址就是将操作数(被操作的数据)存放在寄存器中。能够实现寄存器寻址的寄存器有A、B、DPTR、R0 ~ R7。
例如:在这里插入图片描述
在第3行指令中,对于目的操作数来说就是寄存器寻址,对于源操作数来说就是立即寻址。
在第4行指令中,目的操作数和源操作数都是寄存器,那么二者都是寄存器寻址。

在这里插入图片描述

4.寄存器间接寻址

与寄存器寻址相似,在寄存器寻址时,寄存器中存放的是操作数,而寄存机间接寻址时,寄存器中存放的是操作数的地址。只用R0、R1、DPTR可以实现寄存器间接寻址
例如:
在这里插入图片描述
寄存器R0中存放的是数据3FH的地址40H,这样寄存器间接寻址可以将数据3FH传到累加器ACC中。
Debug
在这里插入图片描述
累加器的数据变为0x3f。

4.1记录一下调试程序过程中遇到的一个错误

在这里插入图片描述
如果程序这样写,会有什么错误。调试一下。
Debug
在这里插入图片描述
a中的数据没有变,可以看见R0中是0x3f,这时候a通过寄存器间接寻址得到的是地址3fh中的数据0x00。

5.基址加变址寻址

基址寄存器只能是PC和DPTR,变址寄存器为累加器A。这种寻址方式是将PC或DPTR中得值与A中的值相加,得到的结果是操作数的地址。注意:是操作数的地址,不是操作数本身。
例如:MOVC A, @A+DPTR
这条指令是把A和DPTR中的值相加,得到操作数的地址,存到A中,然后A在根据地址去找到操作数。
MOVC A,@A+PC
同理,这条只是将DPTR换为PC。
在这里插入图片描述

6.相对寻址

相对寻址就是PC指针当前指向的值,与设置的JC偏移量相加得到的值作为目标地址,其中偏移量是自己设定的。
JC 80H
假如这条指令存放在1005H,取出操作码后PC指向1006H,取出偏移量后PC指向1007H,那么目标地址就是1007H + 80H,但是偏移量是有符号数,80H是-128的补码,因此最后的目标地址是0F87H。

7.位寻址

单片机中21个特殊功能寄存器,其中有11个是可位寻址的(ACC、B、IP、IE、PSW、SCON、TCON、P0 ~ P3)
一共有四种表示形式,以PSW为例

  1. 直接使用位地址
  2. 位名称
  3. 单元地址加位
  4. 特殊功能寄存器名称加位

MOV C, 0D2H
MOV C, OV
MOV C, 0D0H.2
MOV C, PSW.2

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值