还剩18页未读,继续阅读
本资源只提供10页预览,全部文档请下载后查看!喜欢就下载吧,查找使用更方便
文本内容:
什么是DEBUG?DEBUG是DOS提供的用于调试可执行程序的工具软件,在DEBUG环境下,可直接检查和修改寄存器和内存的值,调试和运行程序,使用户进一步了解CPU内部的环境DEBUG程序的启动在DOS的提示符下直接键入命令C:\>DEBUG↙进入DEBUG调试程序后,会出现DEBUG提示符“-”,此时就可以使用DEBUG命令了在XP环境下,用鼠标点击“开始”→“所有程序”→“附件”→“提示符命令”出现C:\DocumentandSetting\Administrator>_>CDC:\↙C:\>在C:盘的根目录下C:\>debug↙进入DEBUG调试程序后,会出现DEBUG提示符“-”,此时就可以使用DEBUG命令了XP环境下Dos窗口大小的切换用Alt+↙翻到讲义第12页
1、R命令Register功能查看和修改寄存器的值格式R↙在R命令后面直接打入回车,显示当前CPU内部所有寄存器的值、标志位状态及将要执行的下一条指令若要修改某个寄存器的值,直接在R后面输入该寄存器的名,然后回车,这时会显示该寄存器的当前值,新值直接输入即可如RAX↙AX00000000当前值:1234↙(1234新值)翻回讲义到44页,修改实验内容第一部分12个寄存器的值AX=1020HBX=5060HCX=A0B0HDX=E0F0HSP=FFFFHBP=0200HSI=3040HDI=7080HDS=2000HES=0300HSS=0400HCS=0100H翻回到讲义第10页
2、D命令Dump功能显示存储器单元的值格式D段寄存器名起始地址在使用D命令之前,我们首先要明白,内存已经被我们划分为4个段,即代码段CS、数据段DS、堆栈段SS和附加段ES做题时要明确显示或修改的是哪个段的内容查看数据段100H单元开始的后面128个字节内存单元的值(16字节*8行=128字节)DDS100↙例
1、查看代码段00单元以后的128个内存单元的值DCS00↙
2、查看堆栈段100单元以后的10个内存单元的值DSS10010a↙显示结果由三部分组成
1、左边是逻辑地址即段地址+偏移地址;中间是对于内存单元的十六进制数;右边是对应内存单元的ASCII码如内存单元30H31H32H33H61H62H63HASCII码0123abc
3、E命令Enter功能修改存储单元的值格式E段寄存器名起始地址如要修改数据段00H~05H单元的值EDS00↙这时会显示数据段00单元的当前值,若要修改直接输入新值,要继续修改下个单元的值,按空格键,继续输入新值修改数据段00H~05H单元的值为313241426162查看被修改后数据段6个内存单元的值DDS00↙2000:0000313241426162……12ABab↑↑↑逻辑地址十六进制数字ASCII码注内存单元值与ASCII码表值无对应的用点“.”来表示翻回讲义到44页完成实验内容第二部分内容修改不同段内存单元的值数据段DS2000H:0100H=4567H2000H:5060H=DEF3H2000H:C110H=ACD6H2000H:80D0H=6789H附加段ES0300H:5060H=1234H堆栈段SS0400H:0200H=4321H注意事项双字节数在内存单元存放时先存放低字节,再存放高字节例2000H:0100H=4567H操作步骤–EDS:100↙2000:
010067454、A命令Assemble(13页)功能把用户输入的汇编语句转换成机器码存放到代码段格式A段寄存器名起始地址注一般机器代码都存放在代码段,在使用A命令时段寄存器名省略,隐含的是代码段例-a00↙0100:0000MOVAX1020↙0100:0003MOVBX3040↙0100:0006ADDAXBX↙0100:0008MOVCXAX↙0100:000A↙没有语句直接回车汇编结束,查看汇编结果-DCS:00↙0100:0000B82010BB4030……↑先存放高位字节注在A命令时,输入的数据为16进制数,数据后H省去
5、U命令(Unassemble)(14页)功能把存放到代码段的机器码转换成汇编语句格式U段寄存器名起始地址注段寄存器名省略,隐含的是代码段例-U00↙0100:0000B82010MOVAX10200100:0003BB4030MOVBX30400100:000601D8ADDAXBX0100:000889C1MOVCXAX0100:000A0000ADD[BX+SI]AL0100:000C48DECAX:↑↑↑逻辑地址机器码操作指令要点通过反汇编可以查看一个程序段的起始地址和末地址所谓的末地址就是该程序段最后一条指令的下一个地址说明-U00是从代码段起始地址开始,反汇编32个字节,如程序较长反汇编32个字节还没完成,再用–U↙,再反汇编32个字节
6、G命令(Go)(16页)功能执行指定的程序段格式G=起始地址末地址↙例要执行以下程序段0100:0000MOVAX10200100:0003MOVBX30400100:0006ADDAXBX0100:0008MOVCXAX0100:000A←末地址操作G=0a↙执行完后可查看结果:CX=4060H注意若末地址错,执行时会造成死机!
7、T命令(Trace)(17页)功能逐条指令执行,同时显示当前CUP环境和将要执行的指令格式T↙说明T命令隐含CS段,若没有指定地址,则从当前的CS:IP开始执行例单步执行以下指令0100:0000MOVAX10200100:0003MOVBX30400100:0006ADDAXBX0100:0008MOVCXAX0100:000A先查看IP指针的当前值,恢复IP指针初值RIP↙IP000A:0000↙单步执行T↙T↙利用跟踪指令可以逐条指令执行,并查看CPU环境当前值,验证每一条指令的执行结果,很容易发现程序的错误之处,为我们调试程序提供了方便,建议同学们很好地掌握
8、Q(Quit)命令(17页)功能退出Debug,返回Dos格式Q↙完成实验内容第二部分利用Debug命令完成下列各条指令提示每次执行新指令前,必须保持寄存器、内存单元的原初始化值题1MOVAHDLAH=
1、DX初始化DX=E0F0H
2、将指令转换为操作码a00↙0100:0000MOVAHDL↙0100:0002↙
3、执行指令G=02↙
4、查看结果AX=F020H↑AH结果AH=0F0H题4:MOVAX[0100H]AX=
1、DS段[0100H]的初始化2000H:0100H=4567HEDS:100↙2000:
010067452、将指令转换为操作码a00↙0100:0000MOVAX
[0100]↙0100:0003↙
3、执行指令G=03↙
4、查看结果AX=4567H题10MOVAL30[BX][SI]AL=先求30[BX][SI]的值30HBX:5060HSI:3040H80D0H30[BX][SI]=80D0H
2、DS段80D0H初始化2000H:80D0H=6789H
3、将指令转换为操作码a00↙0100:0000MOVAL30[BX][SI]↙0100:0003↙
4、执行指令G=03↙
5、查看结果AL=89H题12PUSHCXSP=SP=
1、CX初始化CX=A0B0HSP初始化SP=FFFFH
2、将指令转换为操作码a00↙0100:0000PUSHCX↙0100:0001↙
3、执行指令G=01↙
4、查看结果:SP=FFFDH查看堆栈段(SS)FFFDH单元的值DSS:FFFDH↙SP=FFFDH=B0H题14JMP0100HIP=
1、将指令转换为操作码a00↙0100:0000JMP0100↙0100:0003↙执行指令G=100100↙注如果G=03↙会出现死机
3、查看结果IP=100H。