您现在所在的是:

单片机论坛

回帖:3个,阅读:5335 [上一页] [1] [下一页]
800
江西人
文章数:1
年度积分:50
历史总积分:800
注册时间:2009/6/11
发站内信
发表于:2009/6/11 19:12:26
#0楼
ORG     0000H
MOV A,#02H
INC A
NOP
NOP
NOP
MOVC A,@A+PC
RET ;(改为END用以验证两者的区别)
DB 59H,5AH,0BH,0CH,0DH,5EH,5FH,60H,61H,62H
;在最后一句为RET的情况下,无论加多少个NOP以改变PC的值,最终结果始终不变。如此看来“MOVC A,@A+PC”好像只和A有关。
;将RET改成END后会改变A的值。并且结果不再程序里所列的表中(改变NOP的数量同样会改变A的值,似乎这时PC影响了结果,随着NOP的增加多少,结果也是增加多少)RET虽然会影响PC的值,但也是在“MOVC A,@A+PC”以后。  

932
hxh2009
文章数:13
年度积分:50
历史总积分:932
注册时间:2009/2/27
发站内信
发表于:2009/6/19 21:52:59
#1楼
你好,我也是单片机的爱好者,很想学.但是老学不会.希望能得到你的帮助!谢谢!
我看了你上面讲的我认为:1.;在最后一句为RET的情况下,无论加多少个NOP以改变PC的值,最终结果始终不变。如此看来“MOVC A,@A+PC”好像只和A有关。(我决的MOVC A,@A+PC根A和PC都有关.只是你写的程序有一点问题,改成:
ORG     0000H
MOV A,#00H
INC A(跳过RET指令)
MOVC A,@A+PC
NOP
NOP
NOP
RET ;
DB 59H,5AH,0BH,0CH,0DH,5EH,5FH,60H,61H,62H
因为执行MOVC A,@A+PC这条指令时,将从下一条指令

没时间了该下了,我的QQ429415472  抱歉
932
hxh2009
文章数:13
年度积分:50
历史总积分:932
注册时间:2009/2/27
发站内信
发表于:2009/6/21 15:22:50
#2楼
因为执行MOVC A,@A+PC这条指令时,先将pc值改为下一条指令的地址,然后做无符号加法运算。而你却把NOP写在MOVC A,@A+PC这条指后面,这样就没意义了。
2:MOVC A,@A+PC这条指令主要用于查表,寻址范围较小。RET是子程序返回,当程序执行到这时还会往下执行并没有结束。END是程序结束,当程序执行到这时不会再往下执行,因为已经结束了。
832
zyzhenren
文章数:12
年度积分:50
历史总积分:832
注册时间:2009/6/25
发站内信
发表于:2009/6/25 20:26:12
#3楼
MOVC A,@A+PC   这玩意能查表?   还真不知道。。。

关于我们 | 联系我们 | 广告服务 | 本站动态 | 友情链接 | 法律声明 | 非法和不良信息举报

工控网客服热线:0755-86369299
版权所有 工控网 Copyright©2024 Gkong.com, All Rights Reserved

62.4004