51单片机寄存器赋值

[复制链接]
5724|24
 楼主| W_Controller 发表于 2012-9-22 15:37 | 显示全部楼层 |阅读模式
当要把一个寄存器中的值赋给另一寄存器时,为什么不能直接赋给,而要经过累加器A呢?
比如:
MOV   A,R0
MOV   R1,A
而不能
MOV   R1,R0
心静自然凉 发表于 2012-9-22 17:05 | 显示全部楼层
本帖最后由 心静自然凉 于 2012-9-22 17:08 编辑

这个问题问的好,LZ看书看的认真,想的也深。

我以我现掌握的知识水平浅略的告诉你,寄存器之间不能相互赋值,这是跟单片机的内部电路结构有极大关系的。
或者这么说,51单片机有111条指令,意思就是说,你只能通过这111种控制方式来操作51单片机,其他都是无效的.
forgot 发表于 2012-9-22 17:30 | 显示全部楼层
只有那几种寻址方式  你记好就可以了   汇编:L
gx_huang 发表于 2012-9-22 18:20 | 显示全部楼层
如果所有的寄存器之间都可以直接赋值,MCU的总线结构会复杂很多。
51可以MOV dir,dir,但是SFR不能 dir 访问,只能间址访问。
 楼主| W_Controller 发表于 2012-9-22 19:16 | 显示全部楼层
呵呵,首先感谢各位大侠的回答了
 楼主| W_Controller 发表于 2012-9-22 19:21 | 显示全部楼层
不知有没有哪位大侠能从内部结构给我解释一下:handshake
gx_huang 发表于 2012-9-23 06:45 | 显示全部楼层
LZ,51有:
MOV Rn,dir
MOV dir.dir
所以要实现MOV R1,R0,如果确认R0/R1在BANK0(00H/01H)单元,则可以:
MOV r1,00h
或者
MOV 01H,00H
一般还是用ACC中转比较好。
gunzhusigan 发表于 2012-9-23 11:17 | 显示全部楼层
我知道HIWIN滚珠丝杆用于,XY工作台、加工中心丝杠 、单片机、上,但电路方面我的工程师懂得多一点~!








SIGNATURE............................................................................................................................
HIWIN滚珠丝杆|
 楼主| W_Controller 发表于 2012-9-23 18:19 | 显示全部楼层
额。。。大侠可能还是没有正面回答我的问题。
 楼主| W_Controller 发表于 2012-9-23 18:20 | 显示全部楼层
我想明白为什么不可以
MOV   R1,R0
 楼主| W_Controller 发表于 2012-9-23 18:22 | 显示全部楼层
虽然以上各位大侠没有正面回答我的问题,但还是谢谢了:)
心静自然凉 发表于 2012-9-23 18:59 | 显示全部楼层
11# W_Controller
你所谓的“内部结构”指的是什么呢?
wh6ic 发表于 2012-9-23 19:06 | 显示全部楼层
8位微控制器中Z8系列的可以,通用MCU中可以的很多。
至于为什么51核这样,与它的微指令译码结构有关。
 楼主| W_Controller 发表于 2012-9-23 20:43 | 显示全部楼层
11# W_Controller  
你所谓的“内部结构”指的是什么呢?
心静自然凉 发表于 2012-9-23 18:59
就是指单片机的内部构造,即如果寄存器与寄存器之间可以直接赋值的话,会造成什么后果呢,51内核这样做到底是为了避免什么东西
xuyaqi 发表于 2012-9-23 21:22 | 显示全部楼层
这和城市公交规划线路一样要考虑经济性你出门就得坐人家安排好的线路而不可能随意。
wh6ic 发表于 2012-9-23 21:33 | 显示全部楼层
51核设计为8位字长指令字,如果R0~R7间直接寻址,需要6bit,占用字长过宽,得到的益处过少。如果扩充为16位字长,速度、字长空间与MOV   A,R0  ;MOV   R1,A 一样,而且微代码结构复杂很多。
 楼主| W_Controller 发表于 2012-9-24 08:08 | 显示全部楼层
51核设计为8位字长指令字,如果R0~R7间直接寻址,需要6bit,占用字长过宽,得到的益处过少。如果扩充为16位字长,速度、字长空间与MOV   A,R0  ;MOV   R1,A 一样,而且微代码结构复杂很多。 ...
wh6ic 发表于 2012-9-23 21:33
大侠,这个6bit是怎么来的?
wh6ic 发表于 2012-9-24 09:09 | 显示全部楼层
R0~R7 需要8个地址,3个bit。要直接赋值就需要两次寻址,所以就需要占6bit。
chaily94520 发表于 2012-9-24 16:31 | 显示全部楼层
谁说不行的??你们究竟有没有进行过实际的测试??
至少STC的51机就可以,不信自己烧这个程序试试:

ORG 0040H
MIAN:
MOV R0,P3
MOV R1,R0
MOV P1,R1
AJMP MIAN
END

这个程序是把P3做输入,把P3输出状态传给P1,P3的所有I/O外部输入变化的时候,P1输出同样值。这里就用了MOV R1,R0,测试是完全正常的!你们自己测试看看AT的行不行?
 楼主| W_Controller 发表于 2012-9-24 17:41 | 显示全部楼层
我编译不了,出错 20# chaily94520
您需要登录后才可以回帖 登录 | 注册

本版积分规则

3

主题

169

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部