当前位置:文档之家› DEBUG的基本调试命令

DEBUG的基本调试命令

实验一 DEBUG的基本调试命令一、实验目的1.熟悉Pentium微处理器指令系统和寻址方式2.掌握DEBUG调试软件的基本命令、调试方法。

二、DEBUG调试软件介绍DEBUG.EXE程序是专门为分析、研制和开发汇编语言程序而设计的一种调试工具,具有跟踪程序执行、观察中间运行结果、显示和修改寄存器或存储单元内容等多种功能。

它能使程序设计人员或用户触及到机器内部,因此可以说它是80X86CPU的心灵窗口,也是我们学习汇编语言必须掌握的调试工具。

WINDOWS操作系统安装时自带有DEBUG.EXE程序,不需另外安装。

1、DEBUG程序的使用在DOS提示符下键入命令:C:\> DEBUG [盘符:][路径][文件名.EXE][参数1][参数2]这时屏幕上出现DEBUG的提示符“-”,表示系统在DEBUG管理之下,此时可以用DEBUG 进行程序调试。

若所有选项省略,仅把DEBUG装入内存,可对当前内存中的内容进行调试,或者再用N和L命令,从指定盘上装入要调试的程序;若命令行中有文件名,则DOS把DEBUG 程序调入内存后,再由DEBUG将指定的文件名装入内存。

2、DEBUG的常用命令(1)汇编命令 A格式:A [起始地址] 或 A ;每输入完一条指令,用回车键来确认。

功能:将输入源程序的指令汇编成目标代码并从指定地址单元开始存放。

若缺省起始地址,则从当前CS:100 (段地址:偏移地址)地址开始存放。

A命令是按行进行汇编,主要是用于小段程序的汇编或对目标程序的修改,具有检查错误的功能。

如有错误,用^Error提示。

然后重新输入正确命令即可。

注:DEBUG的A命令中数字部分输入的默认格式是16进制。

如输入10,对于计算机而言,就是10H。

另外A命令不支持标识符的输入。

只能用准确的段地址:偏移地址来设置跳转的位置。

(2)反汇编命令 U格式1:U [起始地址]格式2:U [起始地址][结束地址|字节数]功能:格式1从指定起始地址处开始固定将32个字节的目标代码转换成汇编指令形式,缺省起始地址,则从当前地址CS:IP开始。

格式2将指定范围的内存单元中的目标代码转换成汇编指令。

(3)显示、修改寄存器命令 R格式:R[寄存器名]或R功能:若给出寄存器名,则显示该寄存器的内容并可进行修改。

缺省寄存器名,则按以下格式显示所有寄存器的内容及当前值(不能修改)。

AX=0000 BX=0004 CX=0020 DX=0000 SP=0080 BP=0000 SI=0000DI=0000 DS=3000 ES=23A0 CS=138E IP=0000NV UP DI PL NZ NA PO NC138E:0000 MOV AX,1234-R AX ;输入命令AX 0014 ;显示AX的内容: ;供修改,不修改按回车。

若对标志寄存器进行修改,输入:-RF屏幕显示如下信息,分别表示OF、DF、IF、SF、ZF、AF、PF、CF的状态。

NV UP DI PL NZ NA PO NC不修改按回车键。

要修改需个别输入一个或多个此标志的相反值,再按回车键。

R命令只能显示、修改16位寄存器。

(4)显示存储单元命令 D格式1:D[起始地址]格式2:D[起始地址][结束地址|字节数]功能:格式1从起始地址开始按十六进制显示80H(128)个单元的内容,每行16个单元,共8行,每行右边显示16个单元的ASCII码,不可显示的ASCII码则显示“·”。

格式2显示指定范围内存储单元的内容,其他显示方式与格式1一样。

如果缺省起始地址或地址范围,则从当前的地址开始按格式1显示。

例如: -D 200 ;表示从DS:0200H开始显示128个单元内容-D 100 120 ;表示显示DS:0100-DS:0120单元的内容说明:在DEBUG中,地址表示方式有如下形式:段寄存器名:相对地址,如:DS:100段基值:偏移地址(相对地址),如:23A0:1500(5)修改存储单元命令 E格式1:E[起始地址] [内容表]格式2:E[地址]功能:格式1按内容表的内容修改从起始地址开始的多个存储单元内容,即用内容表指定的内容来代替存储单元当前内容。

例如:—E DS:0100 'VAR' 12 34表示从DS:0100 为起始单元的连续五个字节单元内容依次被修改为'V'、'A'、'R'、12H、34H。

格式2是逐个修改指定地址单元的当前内容。

如:—E DS:0010156F:0010 41.5F其中156F:0010单元原来的值是41H,5FH为输入的修改值。

若只修改一个单元的内容,这时按回车键即可;若还想继续修改下一个单元内容,此时应按空格键,就显示下一个单元的内容,需修改就键入新的内容,不修改再按空格跳过,如此重复直到修改完毕,按回车键返回DEBUG“-”提示符。

如果在修改过程中,将空格键换成按“-”键,则表示可以修改前一个单元的内容。

(6)运行命令 G格式:G[=起始地址][第一断点地址[第二断点地址……]功能:CPU从指定起始地址开始执行,依次在第一、第二等断点处中断。

若缺省起始地址,则从当前CS:IP指示地址开始执行一条指令。

最多可设置10个断点。

(7)跟踪命令 T格式:T[=起始地址][正整数] ;缺省时执行一条指令功能:从指定地址开始执行‘正整数’条指令。

若缺省‘正整数’,表示执行一条指令,若两项都缺省,表示从当前CS:IP指示地址开始执行一条指令。

(8)指定文件命令 N格式:N<文件名或扩展名>功能:指定即将调入内存或从内存写入磁盘的文件名。

该命令应该用在L命令和W命令之前。

(9)装入命令 L格式1:L[起始地址][盘符号][扇区号][扇区数]格式2:L[起始地址]功能:格式1根据盘符号,将指定扇区的内容装入到指定起始地址的存储区中。

格式2将N命令指出的文件装入到指定起始地址的存储区中,若省略起始地址,则装入到CS:100处或按原来文件定位约定装入到相应位置。

(10)写磁盘命令 W格式1:W<起始地址>[驱动器号]<起始扇区><扇区数>格式2:W[起始地址]功能:格式1把指定地址开始的内容数据写到磁盘上指定的扇区中。

格式2将起始地址的BX×10000H+CX个字节内容存放到由N命令指定的文件中。

BX中存放程序段地址的末地址与首地址的差(通常程序存放在一个段中,即BX=0),CX中存放偏移地址的末地址与首地址的差。

在格式2的W命令之前,除用N命令指定存盘的文件名外,还必须将要写的字节数用R命令送入BX和CX中。

(11)退出命令 Q格式:Q功能:退出DEBUG,返回到操作系统。

以上介绍的是DEBUG常用命令,其他命令请参考有关书籍。

三.实验内容1.熟悉debug调试软件,掌握其中红色标注的命令。

2.将0-99等100个数依次存放到1000:0000为首地址的存储单元中。

所对应的宏汇编格式的程序:CODE SEGMENTCS:CODEASSUMESTART: MOV AX,1000HMOV DS, AXXOR BX, BXMOV CX, 0064HMOV AL, 00HALA1: MOV[BX],INC ALDAAINC BXLOOP A1MOV AX, 4C00HINT 21HCODE ENDSEND START用单步命令调试该程序,察看存储单元数据的变化。

3.已知(AX)=701FH,(BX)=13F1H,(CL)=02H。

用DEBUG命令逐条观察下述各指令执行前后相关寄存器和标志位的变化。

SF ZF AF PF CF OF①ADD AX, BX (AX)= H②SUB AX, BX (AX)= H③AND AX, BX (AX)= H④OR AX, BX (AX)= H⑤XOR AX, BX (AX)= H⑥IMUL BL (AX)= H⑦MUL BH (AX)= H⑧SHR AX, CL (AX)= H⑨SAR AX, CL (AX)= H⑩SHL AX, CL (AX)= H程序框架如下,请填上适当的指令完成上述任务。

CODE SEGMENTASSUMECS:CODESTART:;学生自己的程序……;学生自己的程序MOV AX, 4C00HINT 21HCODE ENDSEND START标志名标志为1 标志为0OF DF IF SF ZF AF PF CFOVDNEINGZRACPECYNVUPDIPLNZNAPONC4. 下列程序的功能是求一组十进制无符号数(2位数)的最大值,读懂该程序,写出注释,画出流程图。

1 DATA SEGMENT PARA2 BLOCK DB ‘52’, "14", "56", "85", "34"3 DB "63", "38", "70", "18", "69"4 COUNT EQU $-OFFSET BLOCK5 MAX D B 2 DUP(?)6 DATA ENDS78 CSEG SEGMENT PARA 'CODE'ASSUME CS:CSEG, DS:DATA9 START:1011 MOV AX,DATA12 MOV DS, AX13 MOV SI, OFFSET BLOCK14 MOV BX, OFFSET MAX15 MOV CX,COUNT16 MOV DH,[SI]17 MOV DL,[SI+1]18 INC SI19 INC SI20 COMP: LODSBAL21 MOV AH,22 LODSBDX23 CMP AX,24 JL NEXTAX25 MOV DX,26 NEXT: DEC CX27 LOOP COMPDH28 MOV [BX],DL29 MOV [BX+1],3031 PRINT: MOV BX, OFFSET MAX32 MOV DL, [BX] ;DL中放入要显示的字符高位2 ;AH=2表示显示输出33 MOV AH,34 INT 21H;DOS功能调用[BX+1] ;DL中放入要显示的字符低位35 MOV DL,36 INT 21H4CH ;返回到DOS37 MOV AH,38 INT 21H39 CSEG ENDS40 END START①用MASM 6.11汇编上述程序②用DEBUG跟踪、调试上述程序用U命令列出反汇编程序,与源程序清单进行比较跟踪到语句12,检查语句执行后DS寄存器的变化语句12执行后,发命令D DS:0检查显示的内容是否与程序数据段定义的单元内容一致。

相关主题