没有真正遇到过,只能分析了,我的结论是从头开始循环,分析如下:
PC的工作原理是取当前指令,根据当前指令进行PC赋值,遇到跳转、子程序调用、
堆栈恢复指令时,PC被这些绝对目的地址(当然也有相对指令,这里暂时忽略)进行赋值;否则依据当前指令逐字节读取指令内容。(我是这样理解的,可以看下相应片子的数据手册)
另外,PC也是
寄存器,也执行加法及进位操作,加法时满足寄存器加法的普遍方式:加法结果超过寄存器最大表示范围时,结果溢出,也就是进位位被忽略了。
这样在您的程序执行到ROM的最后(不是程序的最后)一条指令时(虽然您可能没有有意识地在这个位置编制代码,但ROM中这个位置还是有值的,根据烧入器的设置,程序之外的ROM可以选择FF、00等,或者人为充填其他内容),芯片首先将FF、00、或其他内容作为指令进行处理,同时依照以上规则,进行PC赋值,如果内容被理解成非跳转指令,则PC的值在FFFF之后在进行累加,这样产生溢出,可能新值为0000,这样程序就从0000地址开始执行了。
很长时间不摸单片机了,参考一下吧。其实自己用仿真器试试就行了。