查看完全版本 : 请教一个pc指针的问题
有些程序在end前要加一个ljmp $,否则pc指针就会跑到外部rom中去,如果在外部rom中跑完了后,是停在那里呢,还是会回到程序的开始呢?
ljmp $ 是一条死循环程序, 就是 不停运行 这条指命,其他的什么也不做
ljmp $ 是一条死循环程序, 就是 不停运行 这条指命,其他的什么也不做
我知道,我只是不明白指针如果跑到外面去了后还会回来吗。
你指的是那种,据我的了解好象不会跑到外边去。会停在原地的?
欢迎讨论!
CPU不知道下一条指令是不是有效的指令,所以会一直执行下去——无论取到什么数据,它都当指令去执行。
至于ROM之外的数据是什么,那就和CPU的地址、数据线有关了——有的读出来是全“1”的,也有随机的,象8031这种数据/地址复用的,有时读出来是1、2、3……这种有规律的。
反正就是乱执行,结果也是不可预测的,通常叫“跑飞了”。
不妨用仿真机单步跟一跟就明白了。
不一定要跑到ROM之外,ROM中有效程序之后的部分执行结果也是不可预测的。
MAIN:
MOV P2,#0FFH
MOV P1,#0F9H(输入1)
CLR P2.0(选第一位)
MOV P2,#0FFH
MOV P1,#0A4H(输入2)
CLR P2.1(选第二位)
MOV P2,#0FFH
MOV P1,#0B0H(输入3)
CLR P2.2(选第三位)
LJMP MAIN
END
这是我上次询问的数码管显示1、2、3的程序,现在因为有LJMP MAIN这一步,所以数码管显示出来的字符很稳定,但是我把LJMP MAIN去掉后,也能显示1、2、3,只是会一闪一闪的,这是不是说明PC指针跑到外部ROM后又回到了程序的开始处呢?我用的是89S51
后面全是FF,是空指令,后以PC跑完全“1”后会回到0。
vBulletin Version 3.0.7 Translated by
NewVBB.com™ 2009.
Translated and Hacked by:
Ztbbs