1、单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,2020/2/5,#,调试程序,DEBUG,2,调试程序,DEBUG,调试程序,DEBUG,就是用来调试汇编语言程序的一种工具。,主要功能:,显示、修改,REG,、,MEM,的内容,按指定地址启动并执行程序,设置断点,反汇编被调试程序,单条追踪或多条追踪被执行程序,3,一、启动和退出,DEBUG,1,、启动,DEBUG,Win2000,系统:程序 附件 命令提示符,进入,DOS,系统,如果不在根目录,使用,CD.,命令回到根目录,再使用,C,:回到,C,盘根目录,Win98,系统:直接在程序下选择,MS,DO
2、S,方式,进入,DOS,系统。,其余与,Win2000,系统下相同。,(1),进入,DOS,系统,(2),启动,DEBUG,在,C,盘根目录下输入,DEBUG,,按回车键,即可启动,DEBUG,。,此时可看到闪动的光标。,C:windowsdebug,或根目录下,C:debug,-,2.,DEBUG,的命令规则,1,),单字母命令:,D,,,R,,,E,,,A,大小写字母相同,命令和参数间分隔符,(,1,)可加可不加,(,2,)分隔符有,2,个,,或,(,3,)二个相邻的十六进制数间必须加分隔符,DEBUG的启动,例:,D,CS,:,100,120,D,CS,:,100,120,4,),用,C
3、TRL+BREAK,命令停止某命令的执行,5,),每一个命令按回车键后有效,6,),解释性质:一条条检查,7,),使用十六进制数,但不加,H,8,),退出,DEBUG,-Q,3,、,DEBUG,的主要命令,R,、,D,、,A,、,U,、,E,、,G,、,N,6,在启动,DEBUG,时,将,CPU,各个寄存器和标志设置为以下状态:,4,个段寄存器,(CS,DS,SS,和,ES),置为指向自由内存空间的底部,(,最小地址,),。,指令指针寄存器,IP,置为,0100H,堆栈指针寄存器,SP,置为段的末尾处与,OMMAND.COM,的暂驻部分的低地址中较低者。,其余的寄存器,(AX,BX,CX,DX
4、BP,SI,DI),置为,0,。,7,二、显示内存单元的内容,1,、从指定地址开始显示,D,DS:,100,回车,从,DS,:,100H,存储单元开始显示,显示,8,行,16,列数据,(,共,128,个,存储单元,),。,D,回车,从上一次,D,命令显示最后一个内存单元下面的地址开始显示,,显示,8,行,16,列数据。,8,2.,显示指定范围的内存单元的内容,D 100 105,回车,显示内存单元,DS,:,100H,到,DS,:,115H,共,6,个存储单元的内容。,D 100 L 10,回车,显示从,DS,:,100,开始的,10H,个存储单元的内容。,三、修改内存单元的内容,1,、,E
5、命令,(1)E address list,例:,-E,DS,:,100 10 25 A3,回车,该命令将把,DS,:,100H,开始的,3,个存储单元的内容用,10H,,,25H,,,A3H,替换原内容。,9,(2)E DS:100,回车,DS:100 10.,A,、修改该单元的值,DS,:,100 10.25,回车,该存储单元的内容会变为,25H,B,、不修改该单元的值,DS,:,100 10.,空格,25.,输入空格,将显示下一个存储单元即,DS,:,101,的内容,25H,以下操作同,A,、,B,10,四、显示和修改寄存器,1,、显示所有寄存器的内容,-R,回车,将显示所有寄存器的内容
6、2,、显示某个寄存器的内容,例:显示寄存器,AX,的内容,-R AX,回车,11,A,、修改该寄存器的值,AX 0000,:1020,该寄存器的内容会变为,1020H,B,、不修改该寄存器的值,AX 0000,:,回车,该寄存器的内容不改变,3.,显示标志寄存器的内容,-RF,回车,NV UP EI PL NZ NA PO NC,若按下回车键,则保持每个标志位不变,若想修改某个标志位,,可输入此标志位的相反值,顺序无关。,12,标志位,设置,(1),清除,(0),溢出,OV,NV,方向,DN,UP,中断,EI,DI,符号,NG,PL,零,ZR,NZ,辅助进位,AC,NA,奇偶,PE,PO,
7、进位,CY,NC,13,五、汇编命令,1,、,-A,回车,(1),、在前面没有使用过汇编命令时,从,CS,:,0100,开始存放,程序。,(2),、前面使用过汇编命令,紧接着上一个汇编命令的最后,一个单元开始存放程序。,2,、,-A,CS:,1000,从,CS,:,1000H,开始存放程序。,14,六、跟踪和执行,1,、跟踪命令,(1),、,-T=address number,Address:,指定跟踪的起始指令地址,如不写,从当前,CS,:,IP,寄存器指定的地址开始跟踪。,Number,:指定跟踪的指令条数。如不写,则只跟踪一条指令。,例:,-T=0100 5,回车,该命令是从,CS,:,
8、0100,开始执行,5,条指令。,15,2,、运行命令,G,-G=address breakpoint,Address:,指定开始执行指令的地址,如不写,从当前,CS,:,IP,寄存器指定的地址开始跟执行。,breakpoint:,指定断点地址。,必须写,如不写,将造成死机。,例:,-G=0100 0120,回车,该命令将从,CS,:,0100H,开始执行程序,执行到,CS,:,0120H,处,中止。即执行保存在,CS,:,0100H,到,CS,:,011FH,存储空间内的,程序。,关于转移指令,1A40:100 CMP AL,3DH,1A40:103 JS 110,(NEXT),1A40:1
9、05 MOV BX,AL,(NEXT:),1A40:108 MOV BX,CL,1A40:10B,A103,1A40:103 JS 108,循环指令同样处理,关于运行结果的确定,1),记住存放数据的,DS,值,1A00,D1A00:2000,2),关于初始数据,可用,E,命令送内存,也可用变量定义伪指令,注意,:,要随时记下程序,的起始地址及结束地址,上机实验一 调试程序,DEBUG,的使用,18,上机内容:,1,、,P115,,题,2-7,2,、,P117,,题,2-14,,,8,,,9,两题,上机过程:,1,、进入,DEBUG,2,、,A,命令输入程序,3,、,D,、,E,、,R,命令显示
10、修改内存和寄存器的值,4,、,G,、,T,命令运行程序,5,、,D,、,R,命令检查执行结果,6,、如果结果不正确,检查源程序,7,、,A,命令修改程序,回到,3,上机报告要求:,1,、写出源程序,带地址,2,、写出调试过程,包括使用的,DEBUG,命令,上机实验二,DOS,功能调用,19,上机内容:,1,、,P186,,题,3-4,。原题基础上,增加以下要求:,如输入为,Y,或,y,,在屏幕上输出,yes,;如输入为,N,或,n,,在屏幕上输出,NO;,然后退出。如输入其它字符,屏幕上输出,please,input,again,,然后等待重新输入。,2,、编程从键盘输入小写字符串(例如,p
11、lease,),并转换成相应的大写字符串输出(例如,PLEASE,)。,上机报告要求:,写出源程序及执行结果,R,显示,修改寄存器内容命令,R,显示,CPU,内部寄存器的内容和全部标志位状态。,-RAX,-AX 0000,:,(,XX,),-R 16,位寄存器名,(AX,BX,CX,DX,SI,DI,IP,SP,CS,DS,ES,SS),AX=0000 BX=0000 CX=0000 DX=0000 SP=FFFE BP=0000 SI=0000 DI=0000,DS=18A1 ES=18A1 SS=1800 CS=18C0 IP=0100 NV UP EI PL NZ NA PO NC,18
12、C0,:,0100 1EPUSH DS,-RF,NV UP EI PL NZ NA PO NC,(DN PE.),Flags:OV/NV-DN/UP-EI/DI-NG/PL-ZR/NZ-AC/NA-PE/PO-CY/NC,显示和修改一个指定寄定器的内容和标志位的状态,1,)直接按回车,保留原内容。,2,)键入新值,改变,AX,D,显示内存单元命令,D,地址,(,默认长度,L=80H,128,个字节,,DS:,当前地址,),(,默认,DS:),-D,地址范围,显示指定内存范围的内容。,-,D,ES:100,L,30,;,从,ES,:,100H,单元开始,显示,30H,字节内容,-,D,100 3
13、00,;显示,DS,:,100H,到,300H,单元内容,-D,(128,个字节,),从上一个,D,命令所显示的最后一个单元的下一个单元开始,显示,128,个字节,段地址为,DS,地址范围,,可以指定段地址、起始偏移地址和终止偏移地址,或,XXXX,,从起始地址开始显示字节数。,-D200,或,-DDS:200,;从,DS:200H,开始,显示,128,字节,E,修改存储单元内容命令,(,默认,DS,,当前地址,),E,地址,内容表,用命令所给定的内容表去代替指定地址范围的内存单元内容。,其中:内容表为一组十六进制数,也可以是用单引号括起的一串字符。,-E,地址,逐个单元连续修改单元内容。,(
14、空格,跳到下一单元,回车修改结束),-E200,AAAAAAA,20 33 44,88888,(,D200,检查,),-E200,1A40:0200 41.32 41.41.33,U,反汇编命令,U,地址,范围,将指定范围内的代码以汇编 语言形式显示,同时显示该代码位于内存的地址和机器码。,(默认段寄存器为,CS,,以,U,命令的最后一条指令地址的下一个单元作为起始地址;,初值,CS,:,IP,,范围长度为,20H,字节目标代码),-U100 120,1A40,:,100 1EPUSH DS,1A40,:,101 A1 00 20MOV AX,,,2000,1A40,:,104 BB 00
15、20MOV BX,,,2000,:,A,段寄存器名,:,偏移地址,将汇编语言程序指令,逐行直接输入内存单元。,默认段寄存器,CS,,偏移地址为上次汇编尾地址,(初值,CS,:,IP,),-ACS:100,-,A 1A40:100,-,A100,设当前,CS=1A40H,1A40:0100,MOV AX,,,100,1A40:0102,MOV BX,2000,1A40:0106,(回车结束汇编输入),A,汇编输入命令,T,逐条指令跟踪与显示命令(,race into,),T,地址,单步执行当前指定地址处的指令(默认为,CS:IP,处),显示,CPU,所有寄存器内容和全部标志位的状态,以及下一条指
16、令的地址和内容(同执行命令),(默认段寄存器,CS,,偏移地址为当前,IP,(初值,CS,:,100,)。,AX=0000 BX=0000 CX=0000 DX=0000 SP=FFFE BP=0000 SI=0000 DI=0000,DS=18A1 ES=18A1 SS=1800 CS=18C0 IP=0100 NV UP EI PL NZ NA PO NC,18C0,:,0100 1EPUSH DS,-T=CS:100,或,T=18C0:100,或,-,T=100,设当前,CS=18C0H,AX=0000 BX=0000 CX=0000 DX=0000 SP=FFFC BP=0000 SI
17、0000 DI=0000,DS=18A1 ES=18A1 SS=1800 CS=18C0 IP=0101 NV UP EI PL NZ NA PO NC,18C0,:,0101 31 C0 XOR AX,AX,T,逐条指令跟踪与显示命令(,race into,),T,地址,步数,多条跟踪命令,从指定地址开始;若命令中用,地址,给定了起始地址,则从起始地址开始,若未给定,则从当前地址(,CS:IP,)开始,执行命令中的,条数,决定一共跟踪几条指令后返回,DEBUG,状态。,AX=0000 BX=0000 CX=0000 DX=0000 SP=FFFE BP=0000 SI=0000 DI=00
18、00,DS=18A1 ES=18A1 SS=1800 CS=18C0 IP=0100 NV UP EI PL NZ NA PO NC,18C0,:,0100 1EPUSH DS,-,T=CS:100 5,-T5,-T=100 5,-T=18C0:100 5,G,运行断点命令,G,地址,地址,地址,执行用户正在调试的程序,其中地址为执行的起始地址,默认段地址为,CS,中内容,或当前,(CS:IP),。再后面的地址为断点地址。,DEBUG,规定最多设置,10,个断点地址。设置多个断点用于调试较大的程序,即程序中有多个模块、多个通路时用,比较方便,在执行时不论走哪条通路,程序都可以在断点处停下来,以便调整程序。,-,G=FFFF:0,热启动,-,G=100 200,起始,CS:100,断点,CS:200,-,G 2000:100,IP,地址起到,2000,:,100,断点,-,G=100,2000:100 3000:300,两处断点,G,必死机!,
©2010-2025 宁波自信网络信息技术有限公司 版权所有
客服电话:4009-655-100 投诉/维权电话:18658249818