打印

通用工作寄存器和用户RAM区分别?

[复制链接]
5753|9
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
hengshao|  楼主 | 2011-11-12 14:49 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
刚学看了几个汇编写的程序;
一个是延时程序中用到通用工作寄存器:如MOV R5 , #10H
另一个是用到定时器延时时用到用户RAM区:如MOV 31H ,#10H

对此我的想法:两个都是用来装一个计数,应该可以相互调换的;

问题:可以调换的话,两个又有什么区别呢,为什么要专门开一个通用工作寄存器区?
两个区是否物理上独立的?不同指令用不同区域速度不一样或其它?先谢谢了

相关帖子

沙发
chen3bing| | 2011-11-12 15:42 | 只看该作者
用户RAM区还可以自己定义变量啦,不一定用来计数。

使用特权

评论回复
板凳
glkos| | 2011-11-12 19:28 | 只看该作者
31H 查下芯片的RAM 31H是不是定时器外设的专用寄存器
有的寄存器地址和RAM是统一编址
Rx是CPU本身的工作寄存器,RAM是需要另外的总线连接才能被CPU访问;
CPU访问Rx的速度肯定高于访问RAM的

使用特权

评论回复
地板
NE5532| | 2011-11-12 19:30 | 只看该作者
本帖最后由 NE5532 于 2011-11-12 20:06 编辑

SFR只是用了RAM的技术来实现罢了,SFR与对应的控制对象相连,RAM没有这个功能。

使用特权

评论回复
5
DianGongN| | 2011-11-12 20:05 | 只看该作者
本帖最后由 DianGongN 于 2011-11-12 20:06 编辑

通用寄存器R0-R7常用作临时工作单元,比如指针、计数器、累加和,还常用于子程序的参数传递。可以看成所有程序模块的公用单元。
通用寄存器地址为00h-1fh,分4组,可以用psw中的RS1 RS0来选择当前用哪一组。比如主程序用第0组,子程序用第1组,中断服务程序用第2组........,切换起来很方便

用户RAM区用来保存程序的中间结果或最终结果。一般属于某个程序模块专用,是用户定义的专用单元。

注意,对于哪些不需要保存的中间结果使用R0-R7即可。经常看到初学者对所有的中间结果都定义专用单元,很快就把ram用完了。

教材上的例子有时不太合适,不一定都有道理,需要自己判断。

使用特权

评论回复
6
hengshao|  楼主 | 2011-11-13 14:54 | 只看该作者
5# DianGongN 就相当专用跟通用之分?保存中间结果跟不是中间结果之分?

使用特权

评论回复
7
hengshao|  楼主 | 2011-11-13 14:57 | 只看该作者
3# glkos 是吗?看那内部结构图不是低128BRAM在同一块的吗?这么说物理上分开的?

使用特权

评论回复
8
hengshao|  楼主 | 2011-11-13 14:58 | 只看该作者
4# NE5532 SFR是高128B的RAM吧?Rn跟用户RAM 不是都是低128B的RAM吗

使用特权

评论回复
9
JLINGON| | 2011-11-13 15:43 | 只看该作者
RAM 用于置放自己的数据  通用寄存器用于置放指针、临时数据、中间量等   二者功能上是有交汇

使用特权

评论回复
10
hkjc007| | 2011-11-13 15:46 | 只看该作者
:L 1# hengshao

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:貴在坚持,永不言弃

0

主题

98

帖子

1

粉丝