51单片机关于 PC指针和RET的问题 请高手出手相助

来源:百度知道 编辑:UC知道 时间:2024/06/15 06:17:00
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”以后。

你的理解不太对。
问题是当你在前面增加nop后,执行到movc是的PC确实增加了,但同时db定义的那些数在存储器中的地址也会相应增加,movc指令取的是相对于执行到该指令时的pc+a处的数据,所以你就是加再多的nop,取到的还会是0Bh。
至于END的情况,如楼上所说。

最后一句为RET的情况下,MOVC A,@A+PC与NOP当然无关,这条指令是取当前指令地址加A后的数据,A=2,就是说取59H到累加器。你把RET改为NOP结果也一样。

如果RET改为END,因END只是伪指令,意思是结束汇编,MOVC A,@A+PC后的第二个数是没有编译过的,不能确定的一个数。