调试第一个汇编程序(下)

时间:2021-12-18 00:55:06

接“调试第一个汇编程序(上)”。很抱歉,在此篇博文中我截了很多的图,这样便于讲解清楚,各位也看得明白,但是现在我上传的图片太多,不能再继续上传图片,以后一旦解禁,我会把缺失的图片补上。

在watch标签页窗口中,我们在Command命令窗口输入了命令:ws 1, r0来监控r0寄存器的变化,在此就会显示r0寄存器的内容。也可以手动在watch窗口加入需要查看的变量。或者直接从代码中把需要查看的寄存器拖到watch窗口。

OK,我们暂时需要了解这些就可以完全的能调试弄明白我们的程序了。好了,开始我们的第一个问题了。我们使用Ctrl + F5即可调试我们的程序,这时我们仔细观察一下,此时PC寄存器的内容为0x30000000,到底这个内容是如何来得呢。这还要从我们引入的调试文件说起,这个调试文件中就有一句话,指出了pc的初始值内容,实际上pc初始值内容确实来源于此处。这时我们观察Command命令窗口的输出,会看到:Load "C:\\Documents and Settings\\cc\\My Documents\\Asm1_a\\asm_1a.AXF"

Include "C:\\Documents and Settings\\cc\\My Documents\\Asm1_a\\DebugINRam.ini" 字样,实际上这就是告诉调试器pc的内容以及在某些内存区间设置权限。

这个程序不是太长,我们完全不用打断点,单步调试即可。OK,单步执行的快捷键是F10,进入到函数内部的快捷键是F11。通过单步调试,可以很清楚地看到寄存器的变化。如果我们在调试文件中去掉

map 0x00000000,0x00200000 read write exec

map 0x30000000,0x34000000 read write exec这两句,会有什么反应呢,这时,我们观察Command窗口,就会有类似的信息输出:*** error 65: access violation at 0x30200000 : no 'write' permission。此处就是因为没有对内存区间设置权限的原因。通过多次练习,相信大家会对第一个程序进行调试就会有了初步的印象了。

如果大家用VC++ 6.0,会发现uVision的调试功能和VC++ 6.0有很多相似的地方。同样,对于有些内容,我在这里也没有进行深入讲解,以后我会慢慢补充一些相关的知识。我们只需要有这么一个框架,其余的汇编程序都可以套用到这里面来,我相信,经过多次的训练,大家会程序的调试会有了比较深刻的认识了。