51中的Rn到底是什么?

什么是Rn

学过微机原理的人都知道,在8086中,我们存放各种中间变量(操作数)的时候都会放到算术逻辑单元ALU的几个通用寄存器中,AL,BH等等。我们常常会从存储器或者IO口读数据写入这些通用寄存器中,然后进行运算,最后再从AL等往存储器或IO口输出。

51单片机的原理是一样的。在51单片机中,也通过这种CPU中的寄存器的方式来存储以及快速访问中间运算结果。在89C51中,CPU具有128个字节的RAM,最前面的32个字节可以用来做这种寄存器存放中间数。Rn就相当于AL,BH等.

为什么是32个?

51单片机自己为8位的单片机,因此大部分的寄s存器已然是8位的,包括Rn。我们可以看到,n的取值仅为0~7。
那么为什么Rn是32个呢?实际上,89C51中,RAM的分布如下所示:

在这里插入图片描述
可以看到,在RAM里面,工作寄存器区有4个,每一个含有8个字节(也就对应着R0~R7)。在程序中,可以通过更改程序状态寄存器PSW的D4和D3位,选择不同的工作寄存器区。若不选择,默认为第0组。
在这里插入图片描述
在这里插入图片描述

什么是Ri?为什么i只能为0或1?

Rn的n值可为0~7,其寻址方式为寄存器寻址,同微机原理中的AL等一样,首先将操作数取出来MOV到Rn中,然后进行相关运算,最好在MOV到想放置的位置.
相关指令:

MOV	A,Rn          ;(Rn)→A,n =0~7

但是这种方式有时速度较慢,而且需要两步操作不方便.为了解决这个问题,89C51将Rn的第0位和第1位设计为可用寄存器间接寻址.在使用时,将Rn中存入操作数的地址,间接寻址时即会自动跟踪到操作数的地址取出操作数,相关指令:

MOV   A,@Ri     ;i=0或1

由于这两位非常特殊也非常重要,因此用Ri特指这两位.

使用Rn与Ri的注意事项

  1. 如果使用Ri的间接寻址,指令中一定要加上@,以示区分.
  2. 在实际操作中,如果Rn的数量不够,就可以通过设置PSW的数字来更改工作寄存器组,扩展Rn的使用量.另外,更改工作寄存器组后,原工作寄存器组的数值不会变化.因此,如果巧妙运用工作寄存器组,具有保护数据的功能.
  • 8
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值