keil c51 汇编程序调试有的指令不能执行

我写一个简单程序,
MOV SP,#60H
MOV R0,#58H
MOV R1,#00H
....
进入调试状态时,点击下一步,黄色光标在下移时,有时会跳过
MOV R0,#OOH这条指令,在观察窗口观察R0值也是#00H,不知道为什么,望高手指点,对了,有时程序执行后有绿色指示,可是我改了一些内容后,执行的程序光标与实际程序位置不对应,
没有,我在0000h处已经有LJMP START指令了,START在0050H处,对,你说的很对,执行的程序光标与实际程序位置不对应,我也发现了,为什么啊?还有,我调出Disassemble窗口在0050H处还是NOP指令,为什么啊?看我上传的图片

C语言会被优化掉一些代码,汇编没有用过,但我判断不大可能,汇编好像是没有优化处理的。你光标在MOV R0,#00H的上一行是PC值是多少?跳过不跳过时相同吗,如果相同不可跳过,PC值怎么会突变的?如果不同就是被优化了,你调出Disassemble窗口就知道有没有被优化掉了。

看不到图。我是说MOV R0,#00H上一行肯定不是跳转指令,PC值怎么会变,PC值不变肯定会连续执行了。能发到我邮箱不?t_cl@sohu.com.
还有一点,如果你修改了程序,没有重新编译,进入调试窗口将执行以前的代码。如果整行的增加或减少很容易发现,如果你在一行后面增加删减,不注意不好发现的。
温馨提示:内容为网友见解,仅供参考
第1个回答  2010-01-18
肯定是你的PC值被改变了
要不就是你的程序逻辑错误
汇编是不会被KEIL C51优化的,它是最贴近机器的语言。
你再看看你的程序逻辑。
第2个回答  2019-03-06
c和汇编的混合编程没做过
但对于th0、tl0、p1.0这些,你可以是直接用绝对地址代替它们试试
相似回答