当前位置:文档之家› 实验一 DEBUG调试工具的熟悉

实验一 DEBUG调试工具的熟悉

实验1 DEBUG的使用及程序调试方法一、实验目的通过本实验使学生掌握调试工具DEBUG的使用方法、理解汇编指令、存储单元和寄存器等有关概念,能对简单的汇编语言程序进行调试。

二、实验原理DEBUG是DOS、WINDOWS都提供的实模式(8086方式)程序的调试工具,在DOS 方式下工作。

使用它可以读写、传送、查看CPU各种寄存器中的内容、显示内存单元的内容、设置程序起始执行地址或断点、机器码级跟踪程序的运行。

用DEBUG编程简单、方便和直观,可以直接查看程序的执行情况,便于熟悉和理解指令,掌握基本编程技巧。

DEBUG只使用十六进制表示数据(十六进制后面不加H),且对字母的大小写不敏感。

常用到的DEBUG功能:✧用DEBUG的R命令查看、改变CPU寄存器的内容✧用DEBUG的D命令查看内存中的内容✧用DEBUG的E命令修改内存中的内容✧用DEBUG的U命令将内存中的机器指令翻译成汇编指令✧用DEBUG的T命令执行一条机器指令✧用DEBUG的A命令以汇编指令的格式在内存中写入一条机器指令三、实验内容(1)学习调试工具DEBUG的使用方法,熟悉DEBUG常用命令的功能和用法。

(2)利用DEBUG调试简单的汇编语言程序,体会汇编指令的功能、寄存器的作用、存储单元地址与内容的概念和作用,以及程序的执行。

四、实验方法与步骤1.DEBUG的进入与退出DEBUG是在DOS方式下使用的程序。

在进入DEBUG前,应先以从WINDOWS 2000/XP中进入DOS方式(进入的是虚拟8086模式的DOS)。

方法:选择【开始】菜单中的【运行】命令,打开【运行】对话框,在文本框中输入“cmd”后,单击【确定】按钮或按下键盘上的【Enter】键。

在命令提示符后输入”debug”后按下键盘上的【Enter】键。

2. 显示寄存器命令 R功能:用于查看和改变CPU寄存器的内容格式:R [<寄存器>]说明:当R命令后面不指定寄存器时,显示所有寄存器的内容例1-1 显示所有寄存器的内容-rAX=0200 BX=0000 CX=0000 DX=0041 SP=FFEE BP=0000 SI=0000 DI=0000 DS=138A ES=138A SS=138A CS=138A IP=0100 NV UP EI PL NZ NA PO NC 138A:0100 B241 MOV DL,41例1-2 修改寄存器的内容-r axAX 0200100-rAX=0100 BX=0000 CX=0000 DX=0041 SP=FFEE BP=0000 SI=0000 DI=0000DS=138A ES=138A SS=138A CS=138A IP=0100 NV UP EI PL NZ NA PO NC 138A:0100 B241 MOV DL,41例1-3 用RF命令可以显示和修改标志寄存器FR中的标志位,无论修改哪一位标志位,只需要键入该标志位的表示符号(如表1.1所示),并且标志位值的键入顺序可任意。

-rfNV UP EI PL NZ NA PO NC --rfNV UP EI PL NZ NA PO NC -OV CY DI-RFOV UP DI PL NZ NA PO CY -3. 存储器单元访问命令①显示存储器单元命令 D格式:D[<地址范围>]功能:显示指定地址范围内的存储区数据,包括十六进制数据形式及其对应的ASCII码字符显示。

例1-3 显示从段地址1000中偏移量从10H~3fh存储单元的内容-d 1000:10 3f1000:0010 C0 E8 84 00 B0 2C AA F6-06 A6 56 FF 75 1E E8 F3 .....,....V.u...1000:0020 FE EB 28 57 BF 9D 56 E8-12 00 5F E8 0E 00 B0 3A ..(W..V..._....: 1000:0030 AA BE 9D 56 B9 04 00 AC-AA E2 FC C3 E8 D5 FE 8A ...V............可以使用 D 段寄存器(段地址):偏移地址的格式显示内存中从指定地址单元开始的128个内存单元的内容。

例1-4 显示从物理地址从10010开始的存储单元的内容-d 1000:101000:0010 C0 E8 84 00 B0 2C AA F6-06 A6 56 FF 75 1E E8 F3 .....,....V.u...1000:0020 FE EB 28 57 BF 9D 56 E8-12 00 5F E8 0E 00 B0 3A ..(W..V..._....: 1000:0030 AA BE 9D 56 B9 04 00 AC-AA E2 FC C3 E8 D5 FE 8A ...V............1000:0040 D0 E8 D0 FE 8A F0 E8 02-00 8A C2 8A E0 D0 E8 D0 ................1000:0050 E8 D0 E8 D0 E8 E8 02 00-8A C4 24 0F 04 90 27 14 ..........$...'.1000:0060 40 27 AA C3 E8 AD FE 3C-0A 75 E0 C3 BB 67 48 E8 @'.....<.u...gH.1000:0070 E1 03 E8 AD 03 B0 2C AA-E8 99 FE 98 8B D0 8A E0 ......,.........1000:0080 B0 2B 0A E4 79 04 B0 2D-F6 DC AA 8A C4 EB BC E8 .+..y..-........②写存储器单元命令 E格式:E <地址> [<字符串>]功能:逐个修改指定单元内容或将字符串写入指定的一组连续单元。

输入E <地址> [<字符串>]后按【Enter】键,出现提示光标后有两种选择,一是输入数据然后按空格键完成当前存储单元内容的修改,并使光标指向下一个存储单元;二是不输入数据直接按空格键跳过对该存储单元的修改,并使光标指向下一个存储单元。

输入完毕后按【Enter】键结束E命令的操作。

例1-5 将字符串“string”写入以142H为起始地址的存储区-e 142 'string'-d 142138A:0140 73 74 72 69 6E 67-00 00 00 00 00 00 00 00 string........138A:0150 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................例1-6 逐个单元向彩显视频缓冲区写入41h、42、41、42,彩显视频缓冲区的段地址为B800H,数据写入后立即显示出红底高亮闪烁绿色的字符串ABCD。

-e b800:70B800:0070 20.41 07.ca 20.42 07.ca 20.43 07.ca 20.4.汇编与反汇编命令汇编命令A和反汇编命令U是常使用的DEBUG命令。

①汇编命令 A 以汇编指令的形式在内存中写入机器指令格式:A [<起始地址>]功能:逐行汇编程序,主要用于小段程序的汇编说明:使用A命令汇编程序,不允许程序中出现标号和伪指令,但DOS的DEBUG允许使用DB和DW这两条伪指令。

如果没有给出起始地址,汇编后的程序代码从指令指针寄存器IP的值所指定的地址开始存放。

按两次回车键可推出汇编命令A的状态。

例1-7 汇编一段程序,该功能是在屏幕上输出一个大写的字母‘A’-a 100138A:0100 mov dl,41138A:0102 mov ah,02138A:0104 int 21h138A:0106 int 20h138A:0108-②反汇编命令 U格式:U [<地址范围>]功能:在指定的地址范围内,将二进制机器指令逐条翻译成汇编语言符号指令例1-8 例1-7中汇编的程序进行反汇编-a138A:0100 mov dl,41138A:0102 mov ah,02138A:0104 int 21h138A:0106 int 20138A:0108-u138A:0100 B241 MOV DL,41138A:0102 B402 MOV AH,02138A:0104 CD21 INT 21138A:0106 CD20 INT 205. 执行程序命令在DEBUG下,可以完整的执行程序、分段执行程序或单步执行程序①执行程序命令 G格式:G [=<程序起始地址>] [<断点>…]功能:完整或分段执行程序说明:G命令可以从头至尾完整地执行程序,如果G命令带有断点参数,则执行到断点地址时暂停并显示当前个寄存器状态,断点最多允许设置100个。

程序正常结束时显示“Program terminated normally”。

例1-9 执行例1-7中汇编的程序-g =100AProgram terminated normally②跟踪执行命令 P 和 T格式:P [=<地址>] [<跟踪参数>]T [=<地址>] [<跟踪参数>]功能:跟踪命令P和T可以逐条跟踪指令的执行,以便调试程序。

说明:每条指令执行后都将显示各寄存器的当前值。

P命令与T命令的差别是:P命令按程序书写的指令为单位,一次跟踪完一条书写指令(执行一组相关命令),而T命令按存储单元中存放的指令为单位,一次跟踪一条指令。

相关主题