调试程序DEBUG的练习一
- 格式:doc
- 大小:135.00 KB
- 文档页数:8
实验一 DEBUG 的使用实验目的:1.学习使用.学习使用DEBUG DEBUG DEBUG程序的各种命令。
程序的各种命令。
程序的各种命令。
2.掌握.掌握8088/868088/868088/86指令系统指令系统指令系统---------算数指令。
算数指令。
算数指令。
3.掌握用.掌握用DEBUG DEBUG DEBUG调试自编程序的方法。
调试自编程序的方法。
调试自编程序的方法。
4.掌握.掌握8088/8086 CPU 8088/8086 CPU 寄存器的用途和存储器组织及它们之间的关系。
寄存器的用途和存储器组织及它们之间的关系。
寄存器的用途和存储器组织及它们之间的关系。
5.掌握内存操作数及寻址方法。
.掌握内存操作数及寻址方法。
6.掌握汇编语言伪操作.掌握汇编语言伪操作:BYTE PTR,WORD PTR :BYTE PTR,WORD PTR。
内容及步骤:一、一、DEBUG DEBUG 命令使用命令使用: :1、 敲 DEBUG 进入进入进入 DEBUG DEBUG 环境,显示提示符环境,显示提示符环境,显示提示符 '_ ' '_ '。
2、 用命令用命令 D100 10F D100 10F 观察内存中的观察内存中的161616进制码及屏幕右边的进制码及屏幕右边的进制码及屏幕右边的ASCII ASCII ASCII字符。
字符。
字符。
3、 用命令用命令 E100 30 31 32 E100 30 31 32 ………… 3F 3F 将30H 30H~~3FH 3FH写入地址为写入地址为写入地址为100H 100H 100H开始的内存单元中,开始的内存单元中,再用再用D D 命令观察结果,看键入的命令观察结果,看键入的161616进制数是什么字符的进制数是什么字符的进制数是什么字符的ASCII ASCII ASCII码码?4、 用命令用命令 F100 10F 'A' F100 10F 'A' 将'A''A'的的ASCII ASCII码填入内存,用码填入内存,用码填入内存,用D D 命令查看结果。
实 验 一 DEBUG 软 件 的 使 用是专为8086/8088汇编语言设计的一种调试工具,是汇编语言程序设计者必须掌握的工具。
具有显示、修改、动态跟踪等功能。
使用它可以对*.COM 、*.EXE文件进行动态跟踪。
DEBUG可以显示和修改内存与寄存器内容,以便在调试中检查程序,查找与改错;亦支持小汇编,直接对小段程序进行汇编;也可对磁盘进行读写。
一、实验目的1.通过实验掌握DEBUG软件的基本使用方法。
2.进一步熟悉、理解8088/8086的寻址方式。
3.掌握数据传送、算术运算、逻辑运算等类指令的基本操作。
二、实验内容与步骤本实验进行前必须保证系统盘上有DEBUG.EXE文件。
进入DEBUG只需在DOS环境下执行 DEBUG命令,即键入DEBUG回车后,屏幕上显示 DEBUG提示符:“_”(短划线)。
操作如下:C:>DEBUG-注: 字符下有下划线的为键入的内容,\代表回车,后面内容均如此.1.程序输入汇编命令(A命令)在输入程序应注意以下几点:(1)输入的数字必须是十六进制数,并且不输入H。
(2)分号后面的内容(注释)不要输入。
(3)不输入标号,条件转移指令中的标号用偏移地址代替。
方法:先用一个离本转移指令的IP不远的但不一定准确的偏移地址代替标号 ,待程序输入且完成反汇编后获得标号所在处的准确的偏移地址时再修改。
在DEBUG提示符下键入A即进入汇编输入状态-A \键入下面的汇编程序13F2:0100 MOV AX,200013F2:0103 MOV DS,AX13F2:0105 MOV SS,AX13F2:0107 MOV BX,205013F2:010A MOV SI,BX13F2:010C MOV DI,305013F2:010F MOV SI,DI13F2:0111 MOV SP,5FFF13F2:0114 MOV CL,1913F2:0116 MOV BL,CL13F2:0118 MOV AH,F013F2:011A MOV CH,AH13F2:011C MOV BYTE PTR [DI],4013F2:011F MOV WORD PTR [SI],010013F2:0123 MOV DL,[SI+01]13F2:0126 MOV DH,[SI+01]13F2:0129 MOV AL,[SI+01]13F2:012C MOV WORD PTR [BX+SI],0022 13F2:0130 MOV [BX+SI+02],BX13F2:0133 MOV [BX+SI+02],BX13F2:0136 MOV BP,[BX+DI+02]13F2:0139 MOV [BX+DI],BX13F2:013B MOV AX,[BP+DI]13F2:013D MOV BL,AL13F2:013F MOV ES,BX13F2:0141 PUSH BX13F2:0142 PUSH DI13F2:0143 PUSH DI13F2:0144 POP CX13F2:0145 POP DX13F2:0146 XCHG BP,AX13F2:0147 XCHG DH,BL13F2:0149 SAHF13F2:014A CMC13F2:014B LAHF13F2:014C STD13F2:014D CLI13F2:014E PUSHF13F2:014F CLD13F2:0150 POPF13F2:0151 INT2113F2:0153 ^C重新回到DEBUG提示符“-”状态,表示汇编命令已结束。
用DEBUG调试程序示例例如:编程实现两个字类型的数相加,把和存在存储单元中,并且用debug查看程序的运行结果,检查程序运行结果的正确性。
参考源程序如下:DATA SEGMENTNUM1 DW 1234HNUM2 DW 5678HSUM DW ?DATA ENDSCODE SEGMENTASSUME CS:CODE,DS:DATASTART: MOV AX,DATAMOV DS,AXMOV AX,NUM1ADD AX,NUM2MOV SUM,AXMOV AH,4CHINT 21HCODE ENDSEND START假设把源程序命名为jiafa.asm,输入源程序后,完成汇编、连接的过程,则生成了可执行文件jiafa.exe。
运行此可执行文件时在屏幕上无显示结果。
在debug下调试程序的步骤示例如下:一、进入debug,同时把被调试程序调入内存。
回车后即进入了debug程序,结果如下图所示:注意:被调试的是可执行文件,而且文件必须写全名,不能只写主文件名。
二、用u命令反汇编(输入u后回车),以便查找需要设置断点的地址。
三、设置断点运行断点可以设置在程序中的任意一条指令的首地址处,但为了能够查看到程序的运行结果,一般把断点设置在主程序运行完并且程序退出之前,例如程序的最后两条指令是MOV AH, 4CHINT 21H则把断点设置在MOV AH, 4CH处,(如果程序较长,一次反汇编没有找到上述指令,再次输入u命令后回车,直到显示上述指令为止,),对于本例,显示如下图所示的结果。
如上图示例中的指令mov ah,4ch的偏移地址是0000F,指令int 21h(debug下默认为16进制,不显示h)的偏移地址是0011,则用G命令设置断点运行时输入g0F(g是debug下的程序运行命令,后面的数字0F是刚才选定的断点地址)回车后结果如下图:为了能够查看你的程序在内存单元中存放的数据,必须设置断点运行不能只用G命令,并且断点必须是你程序中的某条指令,一般设置在MOV AH, 4CH处。
实验名称实验一利用 DEBUG 调试汇编语言程序段一、实验目的1.熟悉 DEBUG 有关命令的使用方法;2.利用 DEBUG 掌握有关指令的功能;3.利用 DEBUG 运行简单的程序段。
二、实验要求1.仔细阅读有关 DEBUG 命令的内容,对有关命令,要求事先准备好使用的例子;三、实验环境DOS 操作系统四、实验内容1.进入和退出 DEBUG 程序;1)开始—运行点确定进入DOS命令窗口图1进入DOS命令窗口2)在命令窗口中输入 dubug 进入 debug 程序图2进入 debug 程序3)进入 debug 窗口后,输入 q 命令退出 debug图3退出 debug2.学会 DEBUG 中的1)D 命令(显示内存数据 D 段地址:偏移地址)例 1:-D100 ;显示 DS 段, 0100 开始的 128 个字节内容-D ;默认段寄存器为 DS,当前偏移地址(刚进入 debug 程序偏移地址为 0100H)图4默认显示 DS 段内容-D DS:100 ;显示 DS 段, 0100H 开始的 128 个字节内容图5显示 DS 段内容-D CS:200 ;显示 CS 段, 0200H 开始的 128 个字节内容图6显示 CS 段内容-D 200:100 ;显示 DS 段, 0200:0100H 开始的 128 个字节内容图7显示 DS段0200:0100H内容-D 200 ;显示 DS 段, 0200H开始的128个字节内容图8显示 DS段0200H开始的内容-D 100 L 10 ;显示 DS 段, 100H 开始的 100H 个字节内容图9显示 DS段100H开始的100H字节内容2)E 命令(修改指定内存)例 1:-E100 41 42 43 44 48 47 46 45-D 100,L08结果:073F:0100 41 42 43 44 48 47 46 45-e 100 修改内存内容-d 100,L08 查看刚才修改的内存内容图10 修改和查看DS段100H开始的80H字节内容例 2: -E 100073F:0100 41. 42 : 42 是操作员键入此命令是将原 100 号内存内容 41 修改为 42,用 D 命令可察看。
实验一Debug 调试程序的应用一、实验目的1.掌握Debug常用命令的应用。
2.利用Debug调试可执行文件(*.EXE)。
二、实验内容1. 进入Debug,使用A命令将源程序写入100H开始的内存并汇编,然后使用G命令运行程序,接着用U命令反汇编,将机器指令送到起始地址为200H 的若干单元并加以验证,用Q命令退出Debug,返回DOS提示符。
2. 进入Debug,使用A命令将源程序写入100H开始的内存并汇编,然后使用G命令运行程序,接着用D命令观察运行结果后,在用U命令反汇编,用Q命令退出Debug,返回DOS提示符。
3.进入Debug,用A命令写入汇编源程序,接着用R命令显示状态,并用T命令单条执行指令,注意在执行命令的同时观察相应寄存器的状态。
4.练习使用填充命令F、搬家命令M和比较命令C。
5.利用Debug调试可执行文件(*.EXE)。
三、实验仪器、材料1. 软件DOSBOX、MASM2. PC微机一台四、实验步骤1.进入debug,使用A命令:-a100写入以下代码:MOV DL, 33H ;字符3的ASCII送DLMOV AH, 2 ;使用DOS的2号功能调用INT 21H ;进入功能调用,输出‘3’INT 20H ;执行INT 20H中断服务程序,结束程序,返回DOS 写完回车两下,再用-g=起始地址结束地址命令回车,再用-u命令回车,用-d100可得如图1-1,然后用-e200命令空格依次输入:B2 33 B4 02 CD 21 CD 20回车,用-d200可得如图1-2,用q退出debug。
2.进入dedug,使用A命令:-a300 写入以下代码MOV AL, [0120]ADD AL, [0122]DAAMOV BY[0124],ALMOV AL, [0121]ADC AL, [0123]DAAMOV BY[0125],ALINT 20用-g命令,再-d100查看结果如图2-1,在用U命令反汇编,用Q命令退出debug。
实验一Debug命令的使用实验一Debug命令的使用一、实验说明1、 DEBUG简介DEBUG.EXE是DOS提供的用于调试可执行程序的一个工具软件。
在汇编语言程序调试中很常用。
DEBUG的提示符是“-”,所有DEBUG调试命令军在此提示符下输入。
DEBUG命令都是一个字母,后跟一个或多个参数,也可使用默认参数。
DEBUG命令的使用注意问题:(1)字母不分大小写(2)只使用十六进制数,但没有带后缀字母“H”(3)命令如果不符合DEBUG的规则,则将以“error”提示,并以“^”指示出错位置。
(4)每个命令只有按下回车键后才有效,可以用Ctrl+Break终止命令的执行。
2、 Debug的调入和退出以Windows环境为例,点击“开始/运行…”,在“运行”对话框中输入命令:cmd,然后点击“确定”,进入DOS命令行状态,如:C:\Documents and Settings\mjy>然后输入命令:>Debug进入Debug调试状态,出现Debug命令提示府“-”,在此提示符下可运行所需要的Debug 命令了。
退出Debug的命令:Q3、 Debug常用命令(1)汇编命令A,格式为:- A [地址]功能:从指定地址开始允许输入汇编指令,并将该指令汇编成机器指令代码从指定地址开始存放。
若不指定地址,则系统从默认的地址开始存放。
按回车键退出汇编状态应用:用于调试一条指令或几条指令组成的一个程序段。
(2)显示和修改寄存器命令R,格式为:- R [寄存器名]功能:若指定寄存器,则显示指定的寄存器的内容,并可进行修改;若不要修改,则按Enter 健。
若未指定寄存器,则默认为显示所有寄存器的内容。
应用:常用于通过寄存器的值查看指令的执行结果。
(3)内存单元内容的命令E,格式为:- E 地址[内容表]功能:若指定内容表,则用内容表中的内容代替指定地址开始的存储单元的值;否则,从指定地址开始逐个单元显示其内容,并等待用户修改,按空格键则继续显示下一单元的值,按回车键结束。
微机原理实验报告实验⼀DEBUG 调试实验类型:实验课时:指导教师:时间:2013 年⽉⽇课次:第节教学周次:第周实验分室:实验台号:实验员:⼀、实验⽬的1.练习使⽤DEBUG,调试简单汇编程序。
⼆、实验要求1.掌握DEBUG的使⽤,调试程序。
2.读懂程序中各条指令,说明程序功能。
三、实验内容1.启动DEBUG,⽤A命令输⼊并汇编下列程序段。
100 MOV SI,200103 MOV CX,10106 MOV AL,0108 MOV [SI ],AL10A INC SI10B INC AL10D DEC CX10E JNZ 108110 INT 3四、实验结果及分析实验⼆简单汇编语⾔设计实验类型:实验课时:指导教师:时间: 2012 年⽉⽇课次:第节教学周次:第周实验分室:实验台号:实验员:⼀、实验⽬的1.巩固DEBUG及宏汇编的使⽤。
2.加深对指令的理解。
⼆、实验要求1.设堆栈指针SP=2000H,(AX)=3000H,(BX)=5000H。
请编⼀程序将AX的内容和BX的内容进⾏交换。
请⽤堆栈作为两寄存器交换内容的中间存储单元,⽤DEBUG调试程序进⾏汇编与调试。
2.设DS=当前段指地址,(BX)=0300H,(SI)=0002H,请⽤DEBUG的命令将存储器偏移地址300H~304H连续单元顺序装⼊0AH、0BH、0CH、0DH、0EH。
在DEBUG状态下送⼊下⾯程序,并⽤单步执⾏的⽅法,分析每条指令源地址的形成过程?当数据传送完毕时,AX中的内容是什么?程序清单如下:MOV AX,BXMOV AX,0304HMOV AX,[0304H]MOV AX,[BX]MOV AX,0001[BX]MOV AX,[BX][SI]MOV AX,0001[BX][SI]HLT3.设(AX)=0002H,编⼀个程序段将AX的内容乘10,要求⽤移位的⽅法完成。
三、思想描述实验内容1将两个寄存器的内容进⾏交换时,必须有⼀个中间寄存器才能进⾏内容的交换,如果⽤堆栈做为中间存储单元,必须遵循先进后出的原则。
试验一寻址方式和DEBUG的使用什么是DEBUG?DEBUG是DOS提供的用于调试可执行程序的工具软件,是汇编语言程序设计常用的调试工具。
在DEBUG环境下,可直接检查和修改寄存器和内存的值,调试和运行程序,使用户进一步了解CPU内部的环境。
DEBUG程序的启动:在DOS的提示符下直接键入命令C:\>DEBUG ↙,进入DEBUG调试程序后,会出现DEBUG提示符“-”,此时就可以使用DEBUG命令了。
在XP环境下,用鼠标点击“开始”→“所有程序”→“附件”→“命令提示符”。
出现:C:\ Document and Setting \ Administrator >_>CD C:\ ↙C:\>在C:盘的根目录下C:\>debug ↙进入DEBUG调试程序后,会出现DEBUG提示符“-”,此时就可以使用DEBUG命令了。
XP环境下Dos窗口大小的切换用 Alt +↙熟悉DEBUG几个常用命令的功能及使用方法:(8个)1、R命令 (Register)。
功能:查看和修改寄存器的值。
格式:-R↙在R命令后面直接打回车,显示当前CPU 内部所有寄存器的值、标志位状态及将要执行的下一条指令。
若要显示修改某个寄存器的值,直接在R 后面输入该寄存器的名,然后回车,这时会显示该寄存器的当前值,新值直接输入即可。
注意:-R F慎用!无目的修改标志位状态会造成CPU状态混乱,不建议用。
-R 寄存器↙如:-R AX ↙AX 0000 ( 0000 当前值 ):1234 ↙( 1234 新值)讲义第44页,用R命令修改实验内容第一部分12个寄存器的值AX=1020H BX=5060H CX=A0B0H DX=E0F0H SP=FFFFH BP=0200H SI=3040H DI=7080H DS=1200H ES=1300H SS=1400H CS=1100H 2、D命令 (Dump)。
功能:显示存储器单元的值。
格式:-D 段寄存器名:起始地址在使用D命令之前,首先要明白,内存已经被划分为4个段,即:代码段CS、数据段DS、堆栈段SS和附加段ES。
实验一 Debug 环境中程序的输入实验一debug环境中程序的输入实验一调试环境下的程序输入、运行和调试实验目的:感性认识“cpu执行一个程序的具体过程”以及“程序的执行对于cpu内部寄存器的影响”;感性认识“什么是段地址和偏移地址”;感性认识“补码表示法”感性认识“ascii码的用途”。
实验说明:调试环境提示为“-”;如果当前目录Exe中有一个名为debug的文件,则在DOS提示符中插入“debug”,然后按Enter键“Enter”进入调试环境并查看其提示符“-”。
常用的调试命令有:―ax:y(回车)用于输入一个汇编语言程序(a是命令,X是段地址,y是偏移地址,X:y将是程序的起始地址。
在第一次测试中,X可以替换为ABC,y替换为100,然后程序的起始地址将为ab:100)注意:你不可以键入“x”或者“y”,即是,x和y都必须代之以具体的地址,例如abc:100(其中,abc是段地址,100是偏移地址)-UX:Y(回车)用于显示汇编语言程序或“在屏幕上列出汇编语言程序”;自然,X;Y还必须由程序的实际起始地址替换;通常,当一个程序从屏幕上消失(因为它向上移动)时,这种方法可以调整为在屏幕上重新显示更改的程序。
―ax:y(回车)也可以用于修改某命令,x:y是将要被修改的指令的地址。
(所谓的修改其实就是往该地址中重新输入某指令,然后按两次回车键,即可修改成功)-t=x:Y(回车)用于逐步执行汇编语言程序。
请注意,因为它是“一步一步”的,所以您应该键入与已执行程序中的指令数量相同的t命令。
(只有在第一个t命令之后,才需要使用“=”通知CPU程序的起始地址,其余的t命令不需要提供地址,只需键入t并输入即可);一步执行的意义在于:因为CPU在执行指令之前会自动停止,并且会显示当前CPU中每个寄存器的内容。
由于程序的结果(尤其是中间结果)通常在CPU的一个或多个寄存器中,这为我们研究程序的详细执行过程提供了一个很好的机会。
debug 命令使用祥解前段时间我在学习汇编语言,发现这语言不是太难学,他里面的算法思想和高级语言都是一样的,我在学这个之前学过c++ ,所以我才这样说的,学习一门语言固然重要,但是学会使用你所用的平台去调试也很重要,下面这个实验是我们现在正在上的接口原理实验,debug命令使用都是我们教员自己总结的,感觉很好,所以就发过来供大家分享。
实验1 DEBUG调试命令练习一、实验目的1、熟悉DEBUG调试程序的常用命令;2、掌握利用DEBUG命令查看和修改CPU中寄存器及内存单元内容的方法;3、学会汇编、反汇编、运行和调试简单程序段的方法。
二、实验内容和步骤1、Debug程序的启动方法1:键入debug后回车只是装入Debug程序,并没指定要调试程序;方法2:相继装入Debug程序和要调试的程序格式:[路径] debug filename屏幕上出现提示符“-”注意:filename必须是可执行文件,要带扩展名exe2、Debug程序的退出在提示符“-”后输入“Q”回车即可。
3、D命令功能:显示数据段中指定单元或单元块的内容。
【例1】D1000↙结果显示128(80H)个字节的内容,一行16个字节,共8行。
其中每一行的第一列是数据段段寄存器DS的当前值,第二列是每一行的第一个字节在段中的偏移量,中间是16个单元的内容(十六进制),单元地址依次加1。
最右边是该单元内容(十六进制形式的ASCII码)所对应的字符。
【例2】D DS:1000↙结果显示和上例相同,因此在没有定义具体的数据段时,可以省略DS。
【例3】D 1234:1000↙结果显示数据段中以1234H为段地址、偏移量从1000H开始的128个单元的内容。
该例定义了显示范围,显示结果的段地址不一定是段寄存器DS中的当前内容,而是一个指定的段地址。
【例4】D 1234:1000 100F↙结果显示数据段中以1234H为段地址、偏移量从1000H开始到100FH结束的16个单元的内容。
实验4 涉及压缩BCD码数据的转换程序及DEBUG练习一、实验内容: 1. ASCII码表示的十进制数转换为压缩型BCD码2. BCD码转换为十进制数的ASCII码3. 二进制数转换为BCD码4. BCD码转换为二进制数5.应用DEBUG观察上述练习的结果二、实验目的:1.掌握利用DEBUG进行调试目的程序的方法。
2.学习并理解寻址方式,学习改正错误语句的方法。
3.认识压缩型BCD码与非压缩型BCD码表示方法。
4.学习涉及BCD码的数据转换的方法。
三、知识准备1. Debug调试程序的使用Debug.exe是十分重要的调试工具,可以用来以二进制形式查看文件内容、可以进行汇编与反汇编,可以对程序进行跟踪式执行,可以修改寄存器与内存中的数据等等。
命令格式:DEBUG [[<盘符>:][<路径>]<文件名> [<测试参数>]]注意文件名称必须带扩展名。
如果用于汇编程序调试,扩展名只能是.EXE或.COM。
在DEBUG命令后若用户键入文件名,则DEBUG将指定的文件装入内存;若用户未键入文件名,则DEBUG对当前存储器中的内容进行操作,也可以用N和L命令将需要的文件装入存储器。
进入调试器后,在界面最左边出现一个减号,这是Debug提示符,表示可以打入Debug 命令对可执行程序进行查看、动态跟踪和调试。
Debug的命令是单个字母,不区分大小写,字母后面可以有一或多个参数,命令、参数一般用空格分隔。
每输入一个命令,回车后执行。
当有错误时,用^和error指示错误所在。
如果需要中断执行命令,可以使用Ctrl+Break键。
如果不标志单位,在命令中使用的参数均以16进制数为单位,输入16进制数据时不用在数据后加H。
如果针对当前段,关于地址可以只标明偏移地址。
如果为非当前段,要申明段地址,方法是在偏移地址前加段地址说明,用冒号分隔。
段地址可以是具体地址数,也可以是段寄存器名。
汇编语言调试程序DEBUG的练习一、实验目的1、学习使用DEBUG程序的各种命令。
2、利用DEBUG学习8086指令系统。
二、实验任务1、参照说明,掌握DEBUG程序的各种命令,重点是命令R,D,A,U,T,P,G命令的使用。
2、用命令A汇编下列指令,判断指令正误并说明原因。
(1)ROR AX,8;错误,因为ROR指令的源操作数只能是数字1或是CL。
(2)LEA DI,[AX];错误,因为LEA指令的目的操作数不能是DI。
(3)MOV DS,2010;错误,因为段寄存器和立即数不能在MOV指令间传。
(4)PUSH AL;错误,因为PUSH指令的目的操作数只能是通用寄存器或是内存。
(5)OUT 900,AL;错误,因为900已经超过了8位二进制数的范围。
(6)MOV [BX],0;错误,因为内存和立即数之间的类型没有确定。
3、练习使用汇编命令1)利用加法指令求3+52)利用乘法指令求3*53)利用算术运算指令求3的补码4)学习使用逻辑运算指令。
求5和17相与、相或的结果。
5)利用不同移位指令将10011111右移3位,查看结果,并比较不同点。
三、实验设备PC机一台四、实验步骤1、实现3加5:2、实现3*5:3、实现求3的补码:4、实现5和17相与:对实验一的说明下面所有操作均在DOS状态下进行。
DEBUG.EXE是DOS操作系统提供的一个调试汇编语言程序的工具程序。
其主要功能为:▪可动态调试汇编语言程序;▪可检查或修改CPU各寄存器、标志及内存单元的内容;▪可输入汇编指令到指定的内存;▪可把要调试的程序(通常以可执行文件形式存储在磁盘上)调入到内存中,控制CPU按单步、设置断点等方式执行程序,检查程序运行过程中的中间结果,以便寻找程序出错的原因。
一、进入DEBUGC:\MASM>DEBUG二、常用DEBUG 命令1、DEBUG命令概述(1)特点A.除命令RF外,DEBUG命令本身均为单字符,后面跟一个或多个参数,有些命令不给参数也能运行,如下表[]中的参数,这种情况下用默认值作为参数;B.DEBUG下输入和显示的数均为十六进制数,故数字后不可加后缀H,O,B等,否则认为命令错;C.命令和参数不区分大小写;DEBUG主要命令一览表(2)常用参数含义A、内存地址内存地址表示一个内存区域的起始地址,由段地址和偏移地址两部分组成。
实验一:利用Debug 命令调试小汇编程序一。
实验目的:1。
学习使用debug 程序调试小汇编程序2。
熟悉各种Debug 命令的使用。
二。
实验器材:PC 机, DEBUG程序 DOS系统三。
实验原理(DEBUG程序的使用命令)(一)DEBUG程序的调用与命令格式1.调用在DOS提示符下,键入命令:C>DEBUG [d:][path][filename[.exe]]例:E:MASM>DEBUG或 E:MASM>DEBUG AA.EXEDEBUG下的提示符”-”2.命令格式:命令 [参数]•命令DEBUG的所有命令动词均由一个字母(大小写均可)构成!DEBUG下的所有数字均为十六进制数!•参数地址表示方法:段地址:偏移量[addresss] 段寄存器:偏移量如:1419:000或:DS:0000地址范围表示方法:段地址:始偏移量末偏移量[rang] 或:段地址:起始偏移量 L长度(字节数) 如: 1419:100 1FF或: 1419:100 L100(二).DEBUG的主要命令1.显示存储单元命令D(Dump)D[address]或[rang]例如:-D1417:00或:-DDS:00 1F-DDS:00 L202.修改存储单元命令E(Erase)或F(Fill)•E address [list]LIST可以是字节串或字符串(单引号括起)例如:-E13F7:00 41 42 ‘xyz’ 43或-EDS:00 41 42 ‘xyz’ 43也可以用逐个单元相继修改的方法:-E address 如:-E13F7不需要修改单元内容直接在“.”后面直接按空格键表示本单元修改结束;进入下一个内存单元不需要修改单元内容直接在“.”后面输入新的值后,按空格键表示本单元修改结束;进入下一个内存单元按回车键表示整个命令结束•填充命令-F rang list如: -f 13f7:00 1F 41 ‘BCD’ 88-f13f7:00 1f 003.检查和修改寄存器内容命令R (Register ) 有三种格式•显示所有寄存器内容 -R•显示和修改某个寄存器内容NV UP DI PL NZ NA PO NCOV DN EI NG ZR AC PE CY OF 溢出(是/否)DF 方向(减量/增量)IF 中断(允许/关闭)SF 符号(负/正)ZF 零(是/否)AF 辅助进位(是/否)PF 奇偶(偶/奇)CF 进位(是否)标志为标志为标志名-R register name如:-RAX-RBX不需要修改寄存器内容直接在“:”后面按回车结束;需要修改标志在“:”后面输入新的内容,按回车结束;•显示和修改标志位状态-RF不需要修改标志直接在“-”后面按回车结束;需要修改标志在“-”后面输入新的标志,按回车结束4.汇编命令A(Assemble)-A[address]如:-A100在当前地址后面直接输入小汇编指令(标准汇编指令,不能输入宏汇编指令)5.反汇编命令U(Unassemble),有两种格式•从指定地址开始,反汇编32字节-U[address]如:-U1006.运行命令G(Go)-G[=address1] [address2 [address3…]}从指定地址1开始运行,后面为断点地址。
一、单选题第1题(1分)你的得分:1调试程序DEBUG的命令E表示【1】。
A. 单步运行程序B. 反汇编命令C. 检查和修改寄存器内容D. 修改内存单元内容题目答案:D你的答案:D第2题(1分)你的得分:1语句DADA DW 'AB','CD','E','F' 汇编后占用的存储空间是【2】个字节。
A. 4 B. 8 C. 6 D. 5题目答案:B你的答案:B第3题(1分)你的得分:0把汇编源程序变成代码程序的过程是【3】。
A. 编译B. 汇编C. 编辑D. 连接题目答案:B你的答案:D题目分析:把高级语言源程序转换成代码程序称为编译;把汇编语言源程序转换成代码程序称为汇编。
编辑指的是对源程序进行录入、修改等操作。
连接指的是把代码程序转换成可执行文件。
第4题(1分)你的得分:1下列程序段:dataseg segmentevenbyte1 db 78h, 0e2hdataseg ends其中byte1 的地址为【4】。
A. 奇地址B. 偶地址C. 段地址D. 逻辑地址题目答案:B你的答案:B第5题(2分)你的得分:0已知VAR EQU 9MOV CX,((VAR GE 8)AND 2000H) OR ((VAR LT 8) AND 1990H)汇编上述语句时,生成的语句为【5】。
A. MOV CX,1990HB. MOV CX,8C. MOV CX,2000HD. MOV CX,0题目答案:C你的答案:D题目分析:已知VAR EQU 9((VAR GE 8)AND 2000H) OR ((VAR LT 8) AND 1990H)( 0FFFFH AND 2000H) OR (0000H AND 1990H)2000H OR 0000H2000H第6题(1分)你的得分:1书写汇编语言程序时规定,对字母开头的十六进制数,其前面必须加【6】。
实验一调试程序DEBUG练习(一)实验目的及要求1.掌握常用工具软件MASM、LINK的使用2.掌握常用DEBUG命令: G,D,R,T,U,Q 能灵活使用这些命令调试程序3.掌握完整程序设计方法的格式,能正确书写数据段,代码段等。
(二)软硬件平台1.硬件环境微型计算机一台2.软件环境Windows2003/XP操作系统任意一种文本编辑器(EDIT、NOTEPAD(记事本)、WORD等),建议使用EDIT或NOTEPAD汇编程序(MASM.EXE)连接程序(LINK.EXE)调试程序(DEBUG.EXE)(三)实验内容1.比较两个字符串string1和string2所含的字符是否相同,如果相同则显示’Match'否则显示’No match’.请读程序,并将程序补充完整。
2.实验步骤:1)用文字编辑工具(记事本或EDIT)将源程序输入完整后保存在d:\masm 下,注意保存时文件扩展名应为.asm(如lab1.asm)。
2)用汇编程序masm对源文件进行汇编,产生.obj文件和.LST文件。
若汇编时提示有错,用文字编辑工具修改源程序后重新汇编,直至通过。
3)用连接程序link将.obj文件连接成可执行的.exe文件(如lab1.exe)。
4)在DOS状态下直接运行link产生的.exe文件(如 lab1),记录实验结果。
5)用debug调试程序,熟悉debug命令的使用:(1) 键入 debug lab1.exe 进入debug 控制,显示提示符 '-'。
(2) 用命令u检查键入的程序并记录,特别注意左边的机器码和指令地址。
如果一条u命令没有显示完全,可以再次输入u命令,该命令会紧接着上一个命令的输出继续显示。
(3) 用命令’g+地址’在lea s i ,string1指令处设置断点。
其中,命令中的地址项可以从上条命令u的运行结果获得。
(4) 用命令r查看各寄存器的情况并记录。
汇编语言调试程序DEBUG的练习一一、练习目的1、学习使用DEBUG程序的各种命令。
2、利用DEBUG学习8086指令系统。
二、练习任务1、参照说明,掌握DEBUG程序的各种命令,重点是命令R,D,A,U,T,P,G命令的使用。
用命令A汇编下列指令,判断指令正误并说明原因。
1).ROR AX,8;错误,因为ROR指令的源操作数只能是数字1或是CL。
2).LEA DI,[AX];错误,因为LEA指令的目的操作数不能是DI。
3).MOV DS,2010;错误,因为段寄存器和立即数不能在MOV指令间传。
4).PUSH AL;错误,因为PUSH指令的目的操作数只能是通用寄存器或是内存。
5).OUT 900,AL;错误,因为900已经超过了8位二进制数的范围。
6).MOV [BX],0;错误,因为内存和立即数之间的类型没有确定。
2、练习使用汇编命令1)利用加法指令求3+52)利用乘法指令求3*53)利用算术运算指令求3的补码4)学习使用逻辑运算指令。
求5和17相与、相或的结果。
5)学习数据传送指令三、设备PC机一台四、练习步骤1、实现3加5:2、实现3*5:3、实现求3的补码:4、实现5和17相与:5、传送指令(独立练习)1)用A命令在内存100H处键入下列内容:MOV AX,1234MOV BX,5678XCHG AX,BXMOV AH,35MOV AL,48MOV DX,75ABXCHG AX,DX2)用U命令检查键入的程序并记录,特别注意左边的机器码。
3)用T命令逐条运行这些指令,每运行一行检查并记录有关寄存器及IP的变化情况。
并注意标志位有无变化。
说明:下面所有操作均在DOS状态下进行。
DEBUG.EXE是DOS操作系统提供的一个调试汇编语言程序的工具程序。
其主要功能为:1.可动态调试汇编语言程序;2.可检查或修改CPU各寄存器、标志及内存单元的内容;3.可输入汇编指令到指定的内存;4.可把要调试的程序(通常以可执行文件形式存储在磁盘上)调入到内存中,控制CPU 按单步、设置断点等方式执行程序,检查程序运行过程中的中间结果,以便寻找程序出错的原因。
一、进入DEBUGC:\MASM>DEBUG二、常用DEBUG 命令1、DEBUG命令概述(1)特点A.除命令RF外,DEBUG命令本身均为单字符,后面跟一个或多个参数,有些命令不给参数也能运行,如下表[]中的参数,这种情况下用默认值作为参数;B.DEBUG下输入和显示的数均为十六进制数,故数字后不可加后缀H,O,B等,否则认为命令错;C.命令和参数不区分大小写;分类命令格式功能简介读写寄存器R 显示所有寄存器内容R 寄存器名显示和修改指定寄存器内容RF 显示和修改FR的内容汇编和反汇编A[内存地址] 从指定地址开始汇编指令U[内存块] 对指定内存块进行反汇编执行指令T[=内存地址][条数] 单步或多步执行指令P[=内存地址][条数] 单步或多步执行指令G[=内存地址] 连续执行指令G[=内存地址] 断点地址设断点执行程序读写内存D[内存块] 显示指定内存块内容E 内存地址字符或数值串修改指定内存内容F 内存块字符或数值串填充指定内存块S 内存块字符串或数值在指定内存块中查找串M 内存块1 内存块2的首地址复制内存块内容C内存块1 内存块2的首地址比较两个指定内存块退出DEBUG Q 退出DEBUG,返回DOSDEBUG主要命令一览表(2)常用参数含义A、内存地址内存地址表示一个内存区域的起始地址,由段地址和偏移地址两部分组成。
段地址可用一个1至4位的十六进制数表示,也可用某个段寄存器表示,偏移地址只能用1至4位的十六进制数表示。
段地址和偏移地址之间必须用冒号分隔。
例 300:800 表示300:800H的内存地址CS:100 表示以CS的内容为段地址,偏移地址为100H的内存地址B、内存块内存块表示一个内存区域,有两种表示方法:一种是用首地址和末地址表示,其中首地址用前面介绍的内存地址表示法,而末地址只用偏移地址表示,其段地址默认为首地址的段值,末地址的偏移地址应比首地址的偏移地址大。
另一种是用首地址和长度表示,其中长度由字符L引出。
内存块的最大值是64K。
命令D默认的长度为80H个字节,命令U默认的长度为20H个字节。
例下面两种表示法均表示DS:200H~DS:24FH的内存块DS:200 24FDS:200 L50例下面两种表示法均表示3000H:5100H~3000H:51FFH的内存块3000:5100 51FF3000:5100 L100C、字符串参数一般用单引号‘’给出例:-F DS:1000 ‘P lease Input:’D、数值参数为一个字节的十六进制数。
多个数值参数之间必须用分隔符分隔。
例:-E DS:2000 12 34 56 78 902、常用DEBUG命令介绍(1)显示、修改寄存器内容A、显示所有寄存器内容格式:-R功能:以十六进制形式显示CPU内部各寄存器的值;以符号形式显示标志寄存器各标志位(TF除外);并将CS:IP所指向的内存内容反汇编成一条指令,可视为将要执行的指令。
标志名称标志为1 标志为0 溢出标志(OF)(overflow flag) OV NV方向标志(DF)(direction flag) DN UP中断标志(IF)(interrupt flag) EI DI符号标志(SF)(sign flag) NG PL零标志(ZF)(zero flag) ZR NZ辅助标志(AF)(auxiliary carru flag) AC NA奇偶标志(PF)(parity flag) PE PO进位标志(CF)(carry flag) CY NC标志位的符号表示例进入DEBUG后,查看各寄存器的值,并记录当前CS和IP的值。
-RAX=0000 BX=0000 CX=0000 DX=0000 SP=FFEE BP=0000SI=0000 DI=0000DS=1270 ES=1270 SS=1270 CS=1270 IP=0100 NV UP EI PL NZNA PO NC1270:0100 0409 ADD AL,09从显示可知,CS=1270H,IP=0100H由于所装的系统不同,可用内存会有所不同,应记录自己系统进入DEBUG后的CS和IP值。
B、修改寄存器格式:-R 寄存器名功能:DEBUG首先显示指定寄存器的当前值,并在下一行首给出提示符“:”,等待用户输入新值。
若直接回车相当于不修改寄存器的值。
例–R DS1270:12A3DS的内容由原来的1270H修改为12A3H。
(2)汇编、反汇编指令A、汇编命令A格式:-A 内存地址功能:先显示汇编的内存地址,等待用户输入一条助记符指令。
用户输入指令并回车后,DEBUG将把这条指令对应的机器码顺序存放在指定的内存单元中,并提示下一地址,等待用户继续输入下一条指令。
若直接回车,则退出A命令。
若输入指令有误,则显示出错信息,仍然提示当前的汇编地址,用户可重新输入指令。
-A 1270:1001270:0100 MOV AH,21270:0102 MOV DL,’a’error1270:0102 MOV DL,611270:0104 INT 211270:0106 INT 201270:0108B、反汇编指令U格式1:-U 内存地址格式2:-U 内存块功能:格式1从指定地址处开始将20H个字节的目标代码转换成汇编指令形式,缺省内存地址时,从当前地址CS:IP开始。
格式2将指定范围的内存单元中的目标代码转换成汇编指令。
例反汇编从1270:100开始长度为20H个字节的内存单元内容。
-U 1270:1001270:0100 B402 MOV AH,021270:0102 B261 MOV DL,61…(3)显示、修改内存内容A、显示命令D格式1:D 内存地址格式2:D 内存块功能:格式1从起始地址开始按十六进制显示80H个单元的内容,每行16个单元,共8行,每行右边显示16个单元的ASCII码,不可显示的ASCII码则显示“·”。
格式2显示指定范围内的存储单元的内容。
若地址缺省,则按格式1显示。
例如-D 200;表示从DS:0200H开始显示128个单元内容-D 100 120;表示显示DS:1000~DS:0120单元的内容例:-D 12AF:100 L3012AF:0100 41 42 43 44 45 00………ABCDE.W….12AF:011012AF:0120B、修改命令E格式1:-E 内存地址字符或数值串格式2:-E 内存地址功能:对于格式1,用命令中的字符串或数字修改指定的内存单元。
对于格式2,先给出命令中指定内存单元的内容,并给出提示符“·”,可在其后输入要修改的值,若直接按空格则不修改该单元内容,而接着提示下一单元的内容,若直接回车表示结束E命令。
例用字符串‘HELLO‘对应的ASCII码修改从DS:1000H开始的5个内存单元。
-E DS:1000 ‘HELLO‘例用数值12H,34H,56H,78H,90H,FAH 修改从12FA:100H开始的6个单元。
-E 12FA:10012FA:0100 41.12 42.34 43.56 44.78 45.90 00.FA 57C、填充命令F格式:-F 内存块字符或数值串功能:用命令中指定的字符或数值串填入指定的内存块,当指定的字符或数值串的总字节数小于指定的内存块,则在指定的内存块重复输入。
例将字符串‘H ELLO WORLD’填入DS:2000至2100H的内存块中:-F DS:2000 2100 ‘HELLO WORLD’D、搜索命令S格式:-S 内存块字符或数据串功能:在指定的内存块内搜索指定的字符或数据串,如找到则显示字符或数据串在内存中的首地址。
例:在DS:2000H开始,大小为20H的内存块中查找字符串‘HELLO WORLD’-S DS:2000 L20 ‘HELLO WORLD’12A3:200012A3:200CE、复制命令M格式:-M 内存块1 内存块2的首地址功能:将内存块1的内容复制到内存块2,内存块1的内容不变。
例将2000:100H开始,大小为20H的内存块复制到DS:200H-M 2000:100 L20 DS:200F、比较命令C格式:-C内存块1 内存块2的首地址功能:顺序比较两内存块各单元的内容,如两个内存块内容相同,则不显示任何信息,直接返回DEBUG状态;如有不同,则将各自的地址和内容显示出来。
例比较DS:200H和2000H:100H开始,大小为20H的两内存块。
-C DS:200 L20 2000:100(5)执行程序A、单步执行格式:-T=内存地址-P=内存地址功能:用命令中内存地址的段地址和偏移地址修改CS和IP,然后执行由CS:IP指向的内存单元处的一条指令,显示各寄存器的值,并反汇编下一条指令,返回DEBUG状态。