【例7-1】 源程序如下:
为进行程序的调试,首先给源程序制造一个错误,将延时子程序的第3行“djnzr6,”后的改为d1,然后重新编译。由于程序中并无语法错误,所以编译时不会有任何出错提示,但由于转移目的地出错,所以子程序将陷入无限循环中。进入调试状态后,按f10键以过程单步的形式执行程序,当执行到“lcalldelay”行时,程序不能继续往下执行,同时发现调试工具条上的“halt”按钮变成了红色,说明程序在此不断地执行着,而预期这一行程序执行完后将停止,这个结果与预期不同,可以看出所调用的子程序出了差错。为查明出错原因,单击“halt”按钮使程序停止执行,然后单击“rst”按钮使程序复位。再次按下f10键单步执行,但在执行到“lcalldelay”行时,改按f11键跟踪到子程序内部(如果按下f11键没有反应,请在源程序窗口中单击鼠标左键),单步执行程序,可以发现在执行到“djnzr6,d1”行时,程序不断地从这一行转移到上一行,同时观察左侧的寄存器的值,会发现r6的值始终在ffh和feh之间变化,不会减小,而我们的预期是r6的值不断减小,减到0后往下执行,因此这个结果与预期不符。通过这样的观察,不难发现问题是因为标号写错而产生的,发现问题即可以修改,为了验证即将进行的修改是否正确,可以先使用在线汇编功能测试一下。把光标定位于程序行“djnzr6,d1”,打开在线汇编的对话框,将程序改为“djnzr7,0eh”,即转回本条指令所在行继续执行,其中0eh是本条指令在程序存储器中的位置,这个值可以通过在线汇编窗口看到。然后关闭窗口,再进行调试,发现程序能够正确地执行了,这说明修改是正确的。注意,这时候的源程序并没有修改,此时应该退出调试程序,将源程序更改过来,并重新编译连接,以获得正确的目标代码。(www.xing528.com)
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。