windows中Debug的使用
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
【Windows XP】下【Debug】的使用
0、【Debug与MASM编译器对指令的不同处理】
[idata]的不同处理(idata表示常量):对于mov ax,[0]指令,Debug将其视为:“将ds:0处的数据送入ax”,而MASM则将其视为:“mov ax,0”。
要想在汇编源程序中实现将ds:0处的数据送入ax,则需将其写为:mov ax,ds:[0](即,要显式指出段寄存器),但对于[]里用寄存器,比如bx,则默认段地址为ds,写为:mov ax,[bx]与mov ax,ds:[bx]一样。
1、Debug是DOS、Windows都提供的实模式(8086方式)程序的调试工具。
使用它,可以查看CPU各种寄存器中的内容、内存的使用情况和在机器码级跟踪程序的运行。
2、【Windows XP】下进入【Debug】
【开始】 【运行】,输入“command”,点击【确定】,【Alt+Enter】为全屏切换键,然后输入“debug”,回车,即进入Debug。
3、Debug命令大全:
R命令:查看、改变CPU寄存器的内容
D命令:查看内存中的内容
E命令:改写内存中的内容
U命令:将内存中的机器指令翻译成汇编指令
T命令:单步跟踪命令,进入子程序,执行一条机器指令
A命令:以汇编指令的格式在内存中写入一条机器指令
P命令:单步执行指令,不进入子程序,遇到循环则一次性执行,执行INT 21H后显示“Program terminated normally”
G命令:从当前指令一直执行到指定指令,即,一次执行多个指令
【注】在带有内存单元地址的命令中,可以用【寄存器】代替【地址】。
4、R命令:查看、改变CPU寄存器的内容
R命令查看,如下图:
Debug列出了CS:IP所指向的内存单元处存放的机器码0xD2968B36,并将它翻译为汇编指令RCL BYTE PTR[BP+368B],CL。
若要修改一个寄存器的值,可参见下图:
同样,也可以更改其他寄存器的内容,比如:CS、IP等。
5、D命令:查看内存中的内容
D命令查看,如下图:
Debug将列出从指定内存单元开始的128个内存单元的内容。
后面是中间数据的ASCII码,当没有可显示的ASCII码时,debug输出“.”来代替。
接着继续使用D命令,会显示后续的内存单元中的内容。
如果要查看指定一段内存中的内容,如下图所示:
6、E命令:改写内存中的内容
“e 起始地址数据数据数据……”格式,如下图:
还可以采用提问的方式一个一个修改内容,如下图:
下内存中写入字符,如下图:
其中,写入a是写入了一个十六进制数,而不是字符,要写入字符需为:’a’
写入字符串,如下图:
7、用E命令向内存写入机器码,用U命令查看内存中机器码的含义,用T命令执行内存中的机器码
机器码对应的汇编指令
B80100 MOV AX,0001
B90200 MOV CX,0002
01C8 ADD AX,CX
E、D、U命令,写入、查看内存内容、并查看机器码含义,如下图:
由此可以看出,内存中的数据和代码没有任何区别,关键在于如何解释。
用T命令执行指令,如下图:
8、A命令:以汇编指令的形式在内存中写入机器指令
机器码对应的汇编指令
B80100 MOV AX,0001
B90200 MOV CX,0002
01C8 ADD AX,CX
A命令写入指令,如下图:
9、P命令:单步执行指令,不进入子程序,遇到循环则一次性执行,执行INT 21H后显示“Program terminated normally”
①P命令执行INT 21H后显示“Program terminated normally”
MOV AX,0123H
MOV BX,0456H
ADD AX,BX
ADD AX,AX
MOV AX,4C00H ;此行以及下行指令实现程序返回
INT 21H
使用P命令执行INT 21H,如下图:
此处,Program terminated normally-------即,程序正常退出
②P命令一次性执行循环
assume cs:codes
codes segment
mov ax,0ffffh ;此处设置ds:bx指向ffff:6
mov ds,ax
mov bx,6
mov al,[bx] ;此处使ax中的数值与ffff:6内存单元中的数值相同
mov ah,0
mov dx,0 ;累加器清0
mov cx,123 ;循环123次,累加计算(ax)*123
s: add dx,ax
loop s
mov ax,4c00h ;程序返回
int 21h
codes ends
end
执行上述指令时,用P指令可以一次性执行循环,如下图:
10、G命令:从当前指令一直执行到指定指令,即,一次执行多个指令
本例中的汇编代码参见9--P命令--②中的代码,一次性执行到循环代码处,执行图如下:
图为从当前代码一直执行到(IP) = 0012h为止。