如何理解51单片机系列的5个寻址方式?

        在讲解寻址方式之前,我们首先应该了解的是指令的结构,有目的操作数和源操作数组成。格式指令 目的操作数,源操作数

例如: MOV A,R0

这个意思所要表达的是将寄存器R0里的内容复制到累加器A中,其实这也是我接下来要说的一种寻址方式,寄存器寻址。一般我们把目的操作数放在左边,源操作数放在右边。

接下来我开始逐个讲解7个寻址方式。

1、立即寻址

        定义:立即寻址就是操作数在指令中直接给出,也就是指令的地址即操作数的地址,因此把这种方式称为立即寻址,该操作数称为立即数。为了表示指令中的立即数,在操作数前面加“#”标志。

例如:MOV A,#90H

这条指令的功能是把90H这个数据送到累加寄存器A里。

         理解:其实只要看见“#”,我们就可以直接判断出这个指令为立即寻址。当出现“#”时,90H不是表示地址,而是表示一个数。

2、寄存器寻址

        定义:寄存器寻址就是操作数在寄存器中,因此形式地址就是一个寄存器名,指定了寄存器就可以得到操作数。

例如:MOV A,R1

这条指令的功能就是把寄存器R1里的数据复制到累加寄存器A中。

        理解 :我们可以把R1想象成一个电脑文件,我把这个文件命名为“R1”,把A想象成另一个文件,把他命名为“A”,MOV的过程其实就相当于把文件R1里的内容复制到文件A中。

  3、直接寻址

        定义:直接寻址的操作数在内存单元中,在指令中操作数直接以内存单元的地址的形式给出。

例如:MOV A,56H

这条指令的功能是将56H中的数据复制到累加寄存器A中。

        理解:在这里大家要注意的是,这里的56H并不是数据,而是一个内部RAM内存单元,它与寄存器寻址方式是不相同的。寄存器寻址是将寄存器里的数据复制给累加寄存器A,而直接寻址是将内部RAM内存单元里的数据复制到累加寄存器A中。它的功能其实与间接寻址类似。

4、寄存器间接寻址(间接寻址)

定义:寄存器中存放的是操作数的地址,我们称之为寄存器间接寻址,即操作数是通过寄存器间接得到的。

例如:MOV A,@R0

此功能是将R0中地址的地址中的数据复制到累加寄存器A中。

理解:

        这个寻址方式稍稍微有点绕,但不过还好。从定义我们可以知道寄存器中存放的不是数据,而是一个地址,我把这个过程给分解一下,就拿上面的例子来说,寄存器R0中存放了一个地址50H,而这个地址50H中还有一个数据56H,那么@的过程就是将这个56H复制给累加寄存器A。其实这就像是C语言中的指针一样。

        再形象一点就是,我们要找一个学生,首先肯定是要先去他的学校,再去他的班级,这不就找到他了嘛,这其实就是一个地址的嵌套。

5.相对寻址

定义:相对寻址是把指令中给定的地址的偏移量与PC的当前值相加,得到真正的程序转移地址。相对寻址方式主要是解决程序转移而专门设置的。

例如:JC 80H

 这个功能是若C = 0,则PC 

 

  • 4
    点赞
  • 33
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值