todaygood
驱动牛犊
驱动牛犊
  • 注册日期2004-12-13
  • 最后登录2005-11-11
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:1824回复:4

不明白间接寻址

楼主#
更多 发布于:2004-12-29 22:16
大家看一下我的程序
          org   0000h
MOV R0,#80H
MOV @R0,#20H
END
我选择的芯片是At89c52的,有256B的RAM,但编译后调试观察
D:80h 数据为00;
(我本想用间接寻址的方法对RAM区中的80h处赋值)
(如果说80h默认为p0口的话,我们看sfr区的80h处)
S:80h,数据还为00;
不知怎么回事?  
lsn_061
驱动老牛
驱动老牛
  • 注册日期2002-05-09
  • 最后登录2006-10-06
  • 粉丝0
  • 关注0
  • 积分1000分
  • 威望261点
  • 贡献值0点
  • 好评度169点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2004-12-31 08:14
是MOV @R0,#20H还是MOVX @R0,#20H,我也让你搞糊涂了,还有不要对P0口操作,换一个其他的RAM :cool:
还有你这程序太简单了:
org 0000h
JMP START
ORG 1000H
START:
MOV R0,#80H
MOV @R0,#20H
JMP START
END
你要看一看范例,程序从0000开始好像不行的吧!刚开始你最好在范例上面改动,然后设个断点看看!
[img]http://bbs.zndev.com/image/medal/5.gif[/img]
sx_wjy
驱动牛犊
驱动牛犊
  • 注册日期2003-12-19
  • 最后登录2008-06-12
  • 粉丝0
  • 关注0
  • 积分40分
  • 威望5点
  • 贡献值0点
  • 好评度5点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2005-01-09 16:48
你的编译器能不能看到高128字节的Data区,你间接寻址的结果不会对特殊功能区有影响。两个区不一样。
zmwk
驱动中牛
驱动中牛
  • 注册日期2001-05-15
  • 最后登录2009-04-05
  • 粉丝0
  • 关注0
  • 积分59分
  • 威望51点
  • 贡献值0点
  • 好评度2点
  • 原创分0分
  • 专家分0分
地板#
发布于:2005-02-02 18:33
在高128字节内部RAM中,间接寻址和直接寻址访问的是不同区域。
也就是说:
MOV R0, #80H
MOV @R0,#20H


MOV 80H, #20H
执行的是两种不同操作。

前者访问通用RAM区域。
后者访问SFR区域。

堆栈操作也访问通用RAM区域。

P0只是汇编语言里面的助记符,实际相当于80H。
A strong man can save himself. A great man can save another.
lzl
lzl
驱动大牛
驱动大牛
  • 注册日期2001-09-11
  • 最后登录2010-06-22
  • 粉丝1
  • 关注0
  • 积分127分
  • 威望48点
  • 贡献值0点
  • 好评度14点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2005-02-03 23:32
你的程序我看不出问题!
mov @r0,#20h;就是给间接寻址区的RAM赋值.要不你换个地址看看,
mov r0,#95H;
mov @r0,#20h;试试看能不能赋值;若不能肯定是编译器的事了。
l=z=l 我听说,灌水是使分数快速增长的有效方法
游客

返回顶部