Debug FAQ
请详细阅读并理解讲义第6页的调试工具内容。
Q1.程序输入错误,如何修改?
A1.使用“a 修改地址”命令从指定位置开始修改,但是由于各指令(机器码)长度不一,会使其后的代码产生错误,而不得不继续修改。
Q2.单步执行后,如何设置指定位置重新单步执行?
A2.可以使用"t=代码位置",来重新设置单步执行位置。
Q3.如何反汇编指定区域的代码?
A3.使用“u 开始地址 结束位置”,即可反汇编指定内容,如果只使用u命令,则反汇编的区域是从即将单步执行的位置开始反汇编默认长度内容。
Q4.使用D命令的结果都表示什么?
A4.
0B0C:1000 34 12 C3 53 51 2E C6 06-50 91 20 2E 80 26 56 91 4..SQ...P. ..&V.
0B0C:1010 DF 3C 20 74 36 3C 09 74-32 3C 2C 74 31 3C A1 75 .< t6<.t2<,t1<.u
地址 数据的十六进制表示 分割符 数据的ACSII表示
中间的数据一行16个,是从0到15而不是1~16,ACSII中的.是因为数据对应的ACSII不是可显示的字符。
Q5.使用D命令的结果都表示什么?
A5.
AX=1234 BX=0000 CX=0000 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000
DS=0B0C ES=0B0C SS=0B0C CS=0B0C IP=0103 NV UP EI PL NZ NA PO NC
0B0C:0103 A30010 OV [1000],AX DS:1000=5B59
第一行,第二行表示各寄存器值,第二行末尾表示个标志位的值,对应关系请参看讲义第6页。
第三行表示待执行的指令,第一段为地址,第二段为机器码,第三段为汇编代码,如果汇编代码要修改内存数据则有第四段显示即将修改的内存位置的当前数据。
Q6.使用条件跳转语句出现跳转出错。
A6.这个很可能是由于跳转跳转有距离限制的问题,可以用如下方法尝试解决。有条件跳转到一个较近的位置,在这个位置使用无条件跳转。