阅读:1824回复:4
不明白间接寻址
大家看一下我的程序
org 0000h MOV R0,#80H MOV @R0,#20H END 我选择的芯片是At89c52的,有256B的RAM,但编译后调试观察 D:80h 数据为00; (我本想用间接寻址的方法对RAM区中的80h处赋值) (如果说80h默认为p0口的话,我们看sfr区的80h处) S:80h,数据还为00; 不知怎么回事? |
|
沙发#
发布于: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开始好像不行的吧!刚开始你最好在范例上面改动,然后设个断点看看! |
|
|
板凳#
发布于:2005-01-09 16:48
你的编译器能不能看到高128字节的Data区,你间接寻址的结果不会对特殊功能区有影响。两个区不一样。
|
|
地板#
发布于:2005-02-02 18:33
在高128字节内部RAM中,间接寻址和直接寻址访问的是不同区域。
也就是说: MOV R0, #80H MOV @R0,#20H 和 MOV 80H, #20H 执行的是两种不同操作。 前者访问通用RAM区域。 后者访问SFR区域。 堆栈操作也访问通用RAM区域。 P0只是汇编语言里面的助记符,实际相当于80H。 |
|
|
地下室#
发布于:2005-02-03 23:32
你的程序我看不出问题!
mov @r0,#20h;就是给间接寻址区的RAM赋值.要不你换个地址看看, mov r0,#95H; mov @r0,#20h;试试看能不能赋值;若不能肯定是编译器的事了。 |
|
|