第一章_DEBUG使用
实验一 DEBUG 的使用(课件上)

实验一DEBUG 的使用
【实验环境】
PC, Dos系统下debug
【实验目的】
学习和掌握用DEBUG调试程序的方法.
【实验内容】
以微机原理p124页第19题为例,熟悉debug基本操作【完成情况】
1、打开debug界面
2、输入程序
3、开始调试程序,第一步AX变为2280h
程序进行至add cx,ax后,cx为2180H,进行至adc ax,08后,ax为000fH
程序进行至neg bx后,bx为0008H
程序进行至mul dl后,ax为0018H
程序运行至or ax,0ff00H后,ax为0ff18H
程序运行至idiv bx后,ax为0ffe3H
4、退出debug
【实验总结】
本次实验通过对第19题进行实验操作,以寄存器数值变化作为验证,因寄存器实验操作所得数据与对程序进行理论推导所得数据相同,由此完成了对debug工具操作的熟悉,达到了实验目的。
刚开始时由于对指令不熟悉造成了许多麻烦,还需要更进一步的熟悉基本指令。
此外,为了进一步的熟悉,我还做了ftp微机软件实验的第一个,熟悉的debug的使用。
一边对未来的汇编语言调试更加熟悉和得心应手。
实验一、DEBUG的使用方法

实验一、DEBUG的使用DEBUG是为汇编语言设计的一种调试工具,它通过单步、设置断点等方式为汇编语言程序员提供了非常有效的调试手段。
一、DEBUG程序的调用在Windows XP中启动DEBUG程序,可单击“开始”按钮,依次选择“所有程序”、“附件”、“命令提示符”,在DOS的提示符下,键入DEBUG并按回车键。
或者单击“开始”按钮,选择“运行”,在打开的“运行”对话框中输入“DEBUG”并按回车键。
在DEBUG程序调入后,将出现提示符-,此时就可用DEBUG命令来调试程序。
二、DEBUG的主要命令1、显示存储单元的命令D(DUMP),格式为:_D[address]或_D[range]例如,按指定范围显示存储单元内容的方法为:-d100 12018E4:0100 c7 06 04 02 38 01 c7 06-06 02 00 02 c7 06 08 02 G...8.G.....G... 18E4:0110 02 02 bb 04 02 e8 02 00-CD 20 50 51 56 57 8B 37 ..;..h..M PQVW.718E4:0120 8B其中0100至0120是DEBUG显示的单元内容,左边用十六进制表示每个字节,右边用ASCII字符表示每个字节,·表示不可显示的字符。
这里没有指定段地址,D命令自动显示DS段的内容。
如果只指定首地址,则显示从首地址开始的80个字节的内容。
如果完全没有指定地址,则显示上一个D命令显示的最后一个单元后的内容。
2、修改存储单元内容的命令有两种。
·输入命令E,有两种格式如下:第一种格式可以用给定的内容表来替代指定范围的存储单元内容。
命令格式为:-E address [list]例如,-E DS:100 F3 'XYZ'8D其中F3,'X','Y','Z'和8D各占一个字节,该命令可以用这五个字节来替代存储单元DS:0100到0104的原先的内容。
DEBUG使用简介

读端口内容 I 端口地址 调入文件 L 地址 驱动器 启始扇区 数量 移动内容 M 范围 地址 给文件命名 N 路径名 文件名 向端口输出 பைடு நூலகம் 端口地址 退出 Q 显示寄存器内容 R 寄存器名 在内存搜索 S 范围 列表 单步跟踪 T =地址 行数 反汇编 U 范围 写文件 W 地址 驱动器 启始扇区 数量
3)显示、修改寄存器内容( R ) -r ;显示所有寄存器内容 -r ax ;显示并修改AX寄存器内容 4)显示修改存储单元内容(E) -e ds:100 ;从DS:100单元开始修改(修改完一个 单元内容后按空格,修改下一个单元,按Enter 键结束修改。) -e ds:100 43,’abb’,76 ;从DS:100单元开始修改 为43H,61H(a),62H(b),62H(b),76H 5)填充内容单元(F) -f ds:100 200 0 ;将DS:100到200的单元填入0 6)反汇编 可以将存储器中的程序内容用汇编指令显示。
7)运行程序(G) -g =100 ;从CS:100开始执行程序 -g =100 110 ;从CS:100开始执行程序,并 在110设置断点(通过在程序中设置合适的断点, 对程序的查错和排错很重要) 8)单步运行(T) 单步执行时每执行一条指令都会显示寄存 器的内容,供用户参考。 -t ;从当前指令位置单步执行1条指令 -t 6 ;从当前指令位置单步执行6条指令 9)汇编(A) 提供用户输入很短的汇编程序(只接收指令) -a 100;从CS:100开始输入汇编指令程序 (依次输入程序指令,按两次Enter 键退出)
3 DEBUG中的数字全部为十六进制数 1)退出DEBUG(Q) 2)显示内存内容(D) 显示时最左边为地址,内存单元内容以十 六进制(左半部分)和ASCII(右半部分)显示 -d cs:100 ;显示由CS:100开始的128个字节单 元内容 -d 100 ;显示由DS:100开始的128个字节单 元内容 -d 100 120 ;显示由DS:100开始 到120单元内容 (或用-d 100L20) -d 100:120 ;显示100:120开始的128个字节单元内 容
DEBUG的使用及程序调试方法

实验一 DEBUG的使用及程序调试方法一.实验目的1、掌握常用DEBUG命令以及调试简单程序。
2、掌握常用汇编指令的功能及其书写格式。
3、掌握在DUBUG下进行简单程序设计并调试。
二.实验环境微型计算机一台DOS或WINDOWS操作系统,MASM开发套件。
三.实验原理DEBUG是专门为汇编语言设计的调试工具软件,它通过单步、设置断点等方式,为使用者提供了非常有效的调试手段。
在DEBUG 下所有输入的数据都是十六进制,所以不需要后面加H。
并且不区分大、小写字母。
1、直接启动DEBUG程序如在C盘的根目录下,启动的方法是:C:\>DEBUG_这时屏幕上会出现“_”提示符,等待键入DEBUG命令。
2、启动DEBUG程序的同时装入被调试文件命令格式如下:C:\>DEBUG [d:][PATH]filename[.EXT][d:][PATH]是被调试文件所在盘及其路径,filename是被调试文件的文件名,[.EXT]是被调试文件的扩展名。
3、DEBUG的主要命令(1)检查和修改寄存器内容的命令R,它有三种方式:1)显示CPU内部所有寄存器内容和标志位状态,格式为:-RR命令显示中标志位状态的含义如下表所示:标志名置位复位溢出Overflow(是/否)OV NV 方向Direction(减量/增量)DN UP 中断Interrupt(允许/屏蔽)EI DI 符号Sign(负/正)NG PL 零Zero(是/否)ZR NZ 辅助进位Auxiliary Carry(是/否)AC NA 奇偶Parity(偶/奇)PE PO 进位Carry(是/否)CY NC2)显示和修改某个指定寄存器内容,格式为:-R 寄存器名例如输入:-R AX系统将响应如下:AX F1F4:表示AX当前内容为F1F4,此时若不对其作修改,可按ENTER键,否则,输入修改后内容,如:-R BXBX 0369:059F则BX内容由0369改为059F3)显示和修改标志位状态,命令格式为:-RF系统将给出响应,如OV DN EI NG ZR AC PE CY-这时若不作修改可按ENTER键,否则在“-”号之后键入修改值,键入顺序任意。
1DEBUG命令的功能及使用

实验一DEBUG命令的功能及使用一实验目的掌握汇编语言基本运行环境和熟悉DEBUG调试程序的命令。
包括:学习使用指令,掌握常用的指令功能和简单程序设计;掌握DEBUG调试程序的命令,熟悉程序输入、存储器和CPU寄存器及标志位的检查方法,单步、断点、连续等运行程序的调试方法。
二实验内容DEBUG的主要命令功能与格式1.汇编命令A格式:A [[<段寄存器名>/<段地址>:] <段内偏移>]上式等价于:(1)A <段寄存器名>:<段内偏移>(2)A <段地址>:<段内偏移>(3)A <段内偏移>(4)A功能:键入该命令后显示段地址和段内偏移并等待用户从键盘逐条键入汇编命令,逐条汇编成代码指令,顺序存放到段地址和段内偏移所指定的内存区域,直到显示下一地址时用户直接键入回车键返回到提示符“-”。
注:其中(1)用指定段寄存器的内容作段地址,(3)用CS的内容作段地址,(4)以CS:100作地址。
以后命令中提及的各种‘地址’形式,均指(1)、(2)、(3)中A后的地址形式。
2.显示内存命令D格式:D [<地址>/<范围>]上式等价于:(1)D <地址>(2)D <范围>(3)D功能:以两种形式显示指定范围的内存内容。
一种形式为十六进制内容,一种形式为以相应字节的内容作为ASCII码的字符,对不可见字符以‘.’代替。
注:其中(1)以CS为段寄存器。
(3)显示CS:100起始的一片内容。
3.修改内存命令E格式:E <地址> [<单元内容表>]上式等价于:(1)E <地址>(2)E <地址> <单元内容表>其中<单元内容表>是以逗号分隔的十六进制数,或用’或”括起来的字符串,或者是二者的组合。
功能:(1)不断显示地址,可连续键入修改内容,直至新地址出现后键入回车Enter 为止。
debug 的使用

Debug是一种程序调试工具,主要用于帮助程序员检查和修复程序中的错误。
以下是如何使用Debug的基本步骤:
设置断点:断点是一种标记,告诉Debug从标记的地方开始查看。
在要设置断点的代码行上单击鼠标左键即可。
运行程序:在代码区域右击,选择Debug执行。
单步执行:点击Step Into(F7)这个箭头,或者直接按F7,以一行一行地操纵代码,从而判断程序的执行流程是否与预期一致。
查看变量值:在执行过程中,可以查看变量的当前值,以了解程序状态。
删除或禁用断点:选择要删除的断点,单击鼠标左键即可。
如果是多个断点,可以每一个再点击一次。
也可以一次性全部删除。
以上是使用Debug的基本步骤,但请注意,具体使用方式可能会根据Debug的具体版本和配置有所不同。
DEBUG的使用方法

DEBUG程序的使用一、在DOS的提示符下,可如下键入Debug启动调试程序:DEBUG [路径\文件名] [参数1] [参数2]Debug后可以不带文件名,仅运行Debug程序;需要时,再用N和L命令调入被调试程序。
命令中可以带有被调试程序的文件名,则运行Debug的同时,还将指定的程序调入主存;参数1/2是被调试程序所需要的参数。
在Debug程序调入后,根据有无被调试程序及其类型相应设置寄存器组的内容,发出Debug的提示符“-”,此时就可用Debug命令来调试程序。
•运行Debug程序时,如果不带被调试程序,则所有段寄存器值相等,都指向当前可用的主存段;除SP之外的通用寄存器都设置为0,而SP指示当前堆栈顶在这个段的尾部;IP=0100h;状态标志都是清0状态。
•运行Debug程序时,如果带入的被调试程序扩展名不是.EXE,则BX.CX包含被调试文件大小的字节数(BX为高16位),其他同不带被调试程序的情况。
•运行Debug程序时,如果带入的被调试程序扩展名是.EXE,则需要重新定位。
此时,CS : IP和SS : SP根据被调试程序确定,分别指向代码段和堆栈段。
DS=ES指向当前可用的主存段,BX.CX包含被调试文件大小的字节数(BX为高16位),其他通用寄存器为0,状态标志都是清0状态。
二、DEBUG命令的格式Debug的命令都是一个字母,后跟一个或多个参数:字母 [参数]命令的使用中注意:①字母不分大小写;②只使用16进制数,没有后缀字母;③分隔符(空格或逗号)只在两个数值之间是必须的,命令和参数间可无分隔符;④每个命令只有按了回车键后才有效,可以用Ctrl+Break中止命令的执行;⑤命令如果不符合Debug的规则,则将以“error”提示,并用“^”指示错误位置。
许多命令的参数是主存逻辑地址,形式是“段基地址 : 偏移地址”。
其中,段基地址可以是段寄存器或数值;偏移地址是数值。
如果不输入段地址,则采用默认值,可以是缺省段寄存器值。
实验一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的使用方法

DEBUG的使用方法1.设置断点:断点是在代码中设置的一个位置,程序在运行到这个位置时会暂停执行。
可以在关键的代码行上设置断点,以便在程序运行到这些位置时进行观察和调试。
在DEBUG工具中,我们可以在代码行上单击左侧的空白区域来设置断点。
2.执行步进:步进是一种按步执行程序的方法,可以逐行或逐过程执行代码。
通过逐行执行代码,可以观察每一行代码的执行情况,以便找出程序中的错误。
可以使用DEBUG工具提供的步进功能,一次执行一行代码或一个过程。
3.观察变量:在程序运行过程中,可以观察和监视变量的值,以便了解程序的状态。
可以使用DEBUG工具来查看变量的值,并在程序执行过程中跟踪变量的变化。
这对于发现变量值的改变和问题的根源非常有帮助。
4.输出调试信息:在调试过程中,可以通过在代码中插入输出语句来输出调试信息。
可以使用DEBUG工具提供的输出窗口或控制台来查看这些调试信息。
输出调试信息有助于了解程序的执行流程,找到错误发生的原因。
5.检查堆栈:堆栈是保存程序执行状态的一种数据结构,可以在DEBUG工具中查看和跟踪堆栈的状态。
堆栈信息可以告诉我们程序的执行路径,以及代码是如何调用和返回的。
通过检查堆栈,我们可以找到错误发生的上下文和调用链。
6.使用断言:断言是一种在代码中插入的条件,用于检查程序执行过程中的假设和要求。
可以使用DEBUG工具中的断言功能,在关键的代码位置插入断言条件。
当断言条件不满足时,程序会执行中断操作,从而帮助我们快速定位错误。
7.进行追踪:追踪是一种记录程序执行过程的方法,可以在DEBUG工具中查看程序的执行轨迹。
追踪记录了程序的每一步操作,包括函数调用、条件语句的执行和变量的修改等。
通过追踪,我们可以逐步了解程序的执行情况,并找到错误所在。
8.使用条件断点:条件断点是一种在特定条件下触发断点的方法。
可以在DEBUG工具中设置条件断点,当满足特定条件时,程序会在断点处暂停执行。
条件断点可以帮助我们找出特定情况下的错误,提高调试的效率。
实验1 Debug命令使用

实验1 查看CPU和内存,用机器指令和汇编指令编程1. 预备知识:Debug的使用我们以后所有的实验中,都将用到Debug程序,首先学习一下它的主要用法。
(1)什么是Debug?Debug是DOS、Windows都提供的实模式(8086方式)程序的调试工具。
使用它,可以查看CPU各种寄存器中的内容、内存的情况和在机器码级跟踪程序的运行。
(2) 我们用到的Debug功能。
●用Debug的R命令查看、改变CPU寄存器的内容;●用Debug的D命令查看内存中的内容;●用Debug的E命令改写内存中的内容;●用Debug的U命令将内存中的机器指令翻译成汇编指令;●用Debug的T命令执行一条机器指令;●用Debug的A命令以汇编指令的格式在内存中写入一条机器指令。
Debug的命令比较多,共有20多个,但这6个命令是和汇编学习密切相关的。
(3) 进入Debug。
Debug是在DOS方式下使用的程序。
我们在进入Debug前,应先进入到DOS方式。
用以下方式可以进入DOS。
①重新启动计算机,进入DOS方式,此时进入的是实模式的DOS。
②在Windows中进入DOS方式,此时进入的是虚拟8086模式的DOS。
下面说明在Windows中进入Debug的一种方法。
选择【开始】菜单中的【运行】命令,如图1所示,打开【运行】对话框,如图2所示,在文本框中输入“command”后,单击【确定】按钮。
图2 在文本框中输入“command”图1 选择【运行】命令进入DOS方式后,如果显示为窗口方式,可以按下Alt+Enter键将窗口变为全屏方式。
然后运行Debug程序,如图3所示。
图3 运行Debug程序(4)用R命令查看、改变CPU寄存器的内容。
我们已经知道了AX、BX、CX、DX、CS、IP这6个寄存器,现在看一下它们之中的内容,如图4所示。
其他寄存器如SP、BP、SI、DI、DS、ES、SS、标志寄存器等我们先不予理会。
实验一 DEBUG的使用

源程序:MOV AL,30H
MOV BL,26H
ADD AL,BL
PUSH AX
POP DX
MOV AH,02H
INT常用指令练习
1、传送指令
1)用A命令在内存100H处键入下列内容:
0AF4:0108 int 21
0AF4:010Amov dl,43
0AF4:010Cint 21
0AF4:010E int 20
0AF4:0110
-r
AX=0000 BX=0000 CX=0000 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000
DS=0AF4 ES=0AF4 SS=0AF4 CS=0AF4 IP=0100 NV UP EI PL NZ NA PO NC
:0206 CD20 INT 20H ;结束
步骤:a.用E命令将目标代码写入内存CS:0200H~0207H
—E DS:200 B2,33,B4,02,CD,21,CD,20
b.用G命令从200H开始执行。
—G=CS:200
屏幕显示:
3
Program terminated normally.
—
c.用U命令反汇编
(2)用键盘,将AX,BX,CX,DX及DS,ES清0。
2.简单程序的执行:
(1)用E命令输入一段程序并执行,其源程序,目标代码及地址分配如下:
CS:0200 B233 MOV DL,33H ;将十六进制数‘33’存入DL中
:0202 B402 MOV AH,02H ;DOS2号功能调用
:0204 CD21 INT 21H ;屏幕显示DL内容
实验一-DEBUG的使用(1)

实验一DEBUG的使用一、实验目的熟练掌握DEBUG的常用命令以及使用DEBUG调试程序的一般方法。
二、实验内容1.熟悉DEBUG的常用命令通过CMD命令进入DOS方式,运行DEBUG程序,练习DEBUG常用命令(DEBUG 常用命令详细说明见五和六)。
2.使用DEBUG调试程序(1)用CMD命令进入DOS方式。
(2)运行DEBUG程序。
(3)使用A命令将以下笑脸程序逐行输入。
MOV DL,1MOV AH,2INT 21HINT 20H(4)使用T命令逐条指令运行笑脸程序,观察每条指令执行前后相关寄存器的内容变化情况。
(5)使用G命令连续运行笑脸程序,观察程序运行结果。
(6)使用R命令修改寄存器BX和CX的内容为笑脸程序的长度。
(7)使用N命令将笑脸程序命名为。
(8)使用W命令将笑脸程序写到指定磁盘的指定路径目录中。
(9)退出DEBUG,进入笑脸程序所在目录。
(10)运行笑脸程序。
观察程序运行结果。
(11)用DEBUG调试已生成的程序。
三、实验要求认真完成实验每一步骤,详细记录实验过程、现象和结果,及时整理实验报告。
四、实验作业1.用A命令或E命令将笑脸程序中第1条指令中的立即数修改为46,重复步骤(4)~(10),观察程序运行结果,分析为什么?如果要将笑脸程序修改为显示别的字符程序,如何修改程序?2.如果想无限循环显示笑脸,如何修改程序?3.写出实验体会。
五、DEBUG简介DEBUG是一种面向汇编语言的动态调试工具,共有19条命令。
DEBUG提供了可以跟踪、测试程序的环境和条件,使编程者能对. EXE和.COM文件的执行进行动态跟踪调试,能够较快地查找出文件中的逻辑错误和检查程序的运行结果。
此外,也可以在进入DEBUG后直接用小汇编语言(ASM)编写、调试一些小程序。
Microsoft DEBUG命令的具有以下共性:(1)DEBUG提示符为“-”。
(2)任何命令都以一个英文字母开头,后面跟一个或多个参数。
1学习使用DEBUG

实验:1:学习使用调试程序DEBUG实验目的1.熟悉DEBUG的使用方法。
2.利用DEBUG查看及修改CPU内部的寄存器。
3.利用DEBUG查看及修改内存。
实验内容1.学习进入和退出DEBUG程序。
2.练习DEBUG中的R命令、D命令、E命令、F命令。
实验准备1.熟悉R命令、D命令、E命令、F命令的格式。
2.准备例子,设计上机流程。
实验步骤1.在DOS提示符下,进入DEBUG程序。
2.查看寄存器内容。
3.修改寄存器内容。
用R命令将AX BX的内容修改为1050H及23A8H重新用R命令查看寄存器的内容4.查看并修改内存单元内容。
执行F200 220‘AB’命令用D命令“D200”观察内存内容执行F230 23F 12命令用D命令“D230”观察内存内容比较运行结果,得出结论?执行F200 220‘AB’命令执行E命令“E200 41 42 43 44 45”观察内存内容自己设计样例,练习R命令、D命令、E命令、F命令。
实验报告要求详细记录上机流程及调试过程,以本次实验为例:1.如何启动和退出DEBUG程序。
2.按操作步骤记录每一步所用的命令,以及查看到的具体内容。
3.对存储器操作记录所操作单元的内存地址。
写出内存单元的物理地址。
4.记录各段寄存器的值。
5.记录实验过程中出现的问题以及解决的方法。
附录1:本次上机使用的DEBUG命令1. 进入命令提示符窗口方法1:开始/程序/附件/命令提示符方法2:开始/运行/cmd屏幕显示-:表示进入debug调试状态2.显示存储单元的内容命令D格式为:D[address]或D[range]Address格式:段地址:偏移地址注意:段地址可以是段名或者数字,D命令默认显示DS段的内容。
Range格式:起始地址结束地址例如,-d100 120显示偏移地址为0100至0120的单元内容。
屏幕最左边显示主存逻辑地址,中间用十六进制表示每个字节,右边用ASCII字符表示每个字节,·表示不可显示的字符。
实验1debug的使用

实验1debug的使用实验一DEBUG的使用一、实验目的:1. 熟悉DEBUG的功能,掌握其常用命令格式并能熟练使用。
2. 使用DEBUG,观察PC机执行汇编指令的过程,掌握寄存器的名称与内存单元地址的形成。
二、实验要求:1. 遵守规章制度,爱护实验室设备。
2、熟悉Debug各个命令的用法。
3、熟悉寄存器的名称以及物理地址的形成。
4、写出实验报告。
三、实验内容:实验1、 DEBUG常用指令操作进入Debug环境,完成下列步骤。
1、用R命令查看寄存器的值,将AX的值修改为1,BX的值修改为100 (十进制)。
2、用D命令查看内存00200H开始的128个单元的内容。
用E 命令将内存00200H和00202H处的内容分别改为1、2 。
3、用E命令将”I am a student!!”写入内存00200H处。
用D 命令查看是否写入成功。
4、用A 命令向内存00210H处写入汇编指令MOV AX,1234MOV BX,0158ADD AX, BX5、使用U命令反汇编,并用T命令执行上述指令,查看执行后的结果,3条指令执行后AX的值为多少?6、直接在内存中将指令“MOV BX,0158”改为“ADD BX,0158”,其他指令不变。
然后用G命令执行这3条指令,查看AX的值为多少?实验2、理解逻辑地址与物理地址的关系使用Debug命令设置下列寄存器及存储器的内容(DS)=2000H, (BX)=0100H, (SI)=0002H,(20100)=12H, (20101)=34H, (20102)=56H, (20103)=78H,(21200)=2AH, (21201)=4CH, (21202)=B7H, (21203)=65H.,并用命令查看设置是否成功。
实验3、理解指令的执行过程将下面3条指令写入从2000:0开始的内存单元中,利用这3条指令计算2的8次方mov ax, 1add ax, axjmp 2000:003分析jmp指令的功能和执行过程。
实验一DEBUG的使用

实验一DEBUG的使用实验目的:1.学习使用DEBUG程序的各种命令。
2.掌握8088/86指令系统---算数指令。
3.掌握用DEBUG调试自编程序的方法。
4.掌握8088/8086 CPU寄存器的用途和存储器组织及它们之间的关系。
5.掌握内存操作数及寻址方法。
6.掌握汇编语言伪操作:BYTE PTR,WORD PTR。
内容及步骤:一、DEBUG 命令使用:1、敲 DEBUG 进入 DEBUG 环境,显示提示符 '_ '。
2、用命令 D100 10F 观察内存中的16进制码及屏幕右边的ASCII字符。
3、用命令 E100 30 31 32 …… 3F 将30H~3FH写入地址为100H开始的内存单元中,再用D命令观察结果,看键入的16进制数是什么字符的ASCII码?4、用命令 F100 10F 'A' 将'A'的ASCII码填入内存,用D命令查看结果。
5、用命令 F110 11F 41 将41H 填入内存,用D命令观察结果并比较。
6、用R 命令检查各寄存器内容,特别注意AX,BX,CX,DX,IP及标志位中ZF,CF和AF的内容。
7、用R命令将AX,BX内容改写为1234H及5678H。
8、用H命令检查下列各组16进制数加减结果并和你的手算结果比较:(1)34H,22H (2)56H,78H (3)A5,79H (4)1284H,5678H (5)A758,347FH二、8088常用指令练习1、传送指令1)用A命令在内存100H处键入下列内容:MOV AX,1234MOV BX,5678XCHG AX,BXMOV AH,34MOV AL,56MOV CX,75ABXCHG AX,CX2)用U命令检查键入的程序,特别注意左边的机器码。
3)用T命令逐条运行这些指令,每运行一行检查并记录有关寄存器及IP的变化情况。
并注意标志位有无变化。
2、加减法指令:1)用A命令在内存200H处键入下列内容:MOV AH,34MOV AL,2EADD AL,AHSUB AL,78MOV CX,1234MOV DX,5678ADD CX,DXSUB CX,AXSUB CX,CX2)用U命令检查键入的程序及对应的机器码。
DEBUG的主要用途及DEBUG的调用

第一节DEBUG的主要用途及DEBUG的调用DEBUG是为汇编语言设计的一种调试工具,它通过单步执行、设置断点等方式为汇编语言程序员提供了非常有效的程序调试手段。
DEBUG可以直接用来检查和修改内存单元、装入、存储及启动运行程序、检查及修改寄存器,也就是说DEBUG可深入到计算机的内部,可使用户更紧密地与计算机中真正进行的工作相联系。
不仅如此,对汇编语言初学者来说,DEBUG也是练习使用汇编指令的一种有效工具。
初学者可以直接在DEBUG环境下执行汇编指令。
然而,在DEBUG下运行汇编语言源程序也受到了一些限制,它不宜汇编较长的程序,不便于分块程序设计,不便于形成以DOS外部命令形式构成的 .EXE文件,不能使用浮动地址,也不能使用ASM和MASM提供的绝大多数伪指令。
在DOS系统中,DEBUG是以DOS外部命令文件形式提供给用户的,名为DEBUG.EXE。
命令文件DEBUG.EXE一般存放在DOS 子目录下,因此调用DEBUG时,只需在DOS提示符下键入: DEBUG [<驱动器名>:][<路径>][<文件名>[.<扩展名>]][<参数1>][<参数2>] < 回车>例如: C:/DOS>DEBUG A: B:进入DEBUG的提示符是符号“-”。
即,出现提示符“-”就表示可以接受DEBUG命令了。
当进入DEBUG时,寄存器和标志设成以下数值,这些值用于DEBUG调试中的程序。
段寄存器CS,DS,ES和SS均指向DEBUG末尾的第一个段。
IP寄存器置为0100H。
栈指针SP指向尾部或装入程序的暂存部分的底部。
其余寄存器皆取零值,但若用户调用时含文件说明,则CX含文件长度(长度大于64K时BX含长度的高位);标志为各自的复位值;驱动器传送地址在代码段位移80H处。
注意,若DEBUG装入扩展名为.EXE的文件,则DEBUG需重定位且设置段寄存器指示器为文件中所定义的值。
汇编_DEBUG的使用

格式转换程序
返 回
上机操作过程
1.编辑 1.对编辑完成的源程序在存盘时扩展名必须加写.ASM 2.一定要严格遵守汇编语言书写格式及段结构的格式来 编写程序
2.汇编
汇编过程就是将汇编语言源程序转换成机器能够识别的 目标代码程序,即OBJ的二进制文件。还可生成扩展名 为.LST的列表文件,扩展名为.CRF的符号索引文件。
DEBUG常用命令-Q命令
退出DEBUG程序的命令Q(quit)
退出DEBUG,返回到DOS 该命令无存盘功能,如需存盘应先使用W 命令
常用的DOS功能调用
书本的第8章专门讲述中断程序设计 而在讲第8章以前,我们需要用到几个常用
的DOS功能调用,所以这里先简单介绍几个 使用方法:
A命令举例:
-A 127C:0100 mov 127C:0103 mov 127C:0105 int 127C:0107 mov 127C:0109 int 127C:010B db 127C:011E -r cx CX 0000 :011E -n -w Writing 0011E -q C:\>2
DEBUG常用命令-U命令
反汇编命令U(Unassemble)
从指定地址开始,反汇编32个字节
格式为: U [地址] 例如: U 100 如果地址被省略则从上一个U命令的最后一条指令的 下一个单元开始显示32个字节。 格式为: U [range] 例如: U 100 10C 从偏移地址为100H处开始反汇编10CH个字节
1.设置入口参数(有些不需要设置的就不设置) 2.功能调用号送AH寄存器 3.发软中断指令“INT 21H”
4C号功能调用
debug的使用

实验报告
姓名
***
学号
***
专业班级
计算机科学与技术
指导教师
李桂成
批改日期
实验名称
实验1 debug的使用
一.实验目的:
1、了解对debug的使用。
2、初步了解整个实验的流程,为写源代码,编译源代码打下基础
3、熟悉相应的debug命令,并能够了解该命令以及使用
4、通过实验来加深对寄存器、内存等的理解
5、学会对一些简单的指令的操作,加深对指令操作的理解
二.实验内容
1、学会如何进入debug环境
2、使用-a开始汇编
3、使用相应的汇编指令
4、进行-u反汇编
5、使用-r查看寄存器的值
6、使用-t按步执行操作
7、使用-d显示内存单元的内容
8、使用-e修改内存单元的内容
9、使用-rds改变ds的值
运行结果贴图:
实验一__DEBUG的使用

汇编语言程序设计实验指导书《汇编语言程序设计》实验是学习本课程的每个考生必须要通过的一个重要的实践环节,上机实验单独作为本课程的实验考核成绩。
《汇编语言程序设计》是一门实践性很强的课程,只有多上机操作,对汇编语言源程序进行编辑、汇编、连接、调试和运行全过程的训练,才能加深对本课程基本知识的理解,才能熟练地掌握程序设计的方法与技巧,才能学好本课程。
为便于学员较好完成上机操作和实验报告,特此作出如下说明和要求:(1)做好上机实验的准备工作:学员对每个实验需要进行预习,了解相关内容和具体要求,熟悉上机操作步骤,学会相关系统软件的使用,掌握各种操作调试命令。
(2)编写源程序:按照实验题目的要求,学员要事先独立完成汇编语言源程序的编写工作,并对源程序进行认真的静态检查,减少错误的发生。
(3)完成实验报告:做完上机实验,学员要严格按照实验报告的格式要求写出实验报告。
实验报告的内容为:实验名称、实验的目的、实验的内容和要求、实验步骤、实验结果并附上源程序清单和程序流程图。
实验一DEBUG的使用(一)实验目的1、熟悉DEBUG程序中的命令,学会在DEBUG下调试运行汇编语言源程序。
2、掌握8086/8088的寻址方式及多字节数据的处理方法。
(二)实验设备硬件环境:IBM-PC及其兼容机软件环境:操作系统DOS3.0版本以上调试程序(三)实验内容和要求实验内容:1、利用DEBUG程序中的“E”命令,将两个多字节数“12345678H”和“FEDCBA98H”分别送入起始地址为DS:0200H和DS:0204H两个单元中。
2、分别用直接寻址方式和寄存器间接寻址方式编写程序段,实现将DS:0200H单元和DS:0204H单元中的数据相加,并将运算结果存放在DS:0208H 单元中。
实验要求:本次实验的内容均在DEBUG下完成,实现数据的装入、修改、显示;汇编语言程序段的编辑、汇编和反汇编;程序的运行和结果检查。
(四)预习要求1、复习DOS启动方式和DOS有关命令的使用;2、阅读本书后的附录,熟悉掌握DEBUG调试程序中的A、D、E、G、Q、R、T、U命令的书写格式及功能;3、复习寻址方式和相关的数据传送指令及算术运算指令。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
第一章DEBUG的使用一、DEBUG概述DEBUG是在DOS状态下面供程序员使用的程序调试工具。
它可以用来检查内存中任何地址中的内容以及修改特定地址中的内容。
DEBUG还可以用于逐指令执行某个程序,追踪程序的执行过程,比较一条指令执行前后数值变化情况,读写文件与磁盘扇区。
此外,DEBUG 还可以用于读写端口中的数值。
在DEBUG状态下,所有数据都作为字节序列,可以用DEBUG把任何类型的文件读入内存中。
DEBUG能够处理的数据为两种: 十六进制数和ASCⅡ码,使用两位数表示十六进制数据(0~9,A~F)。
在DEBUG中涉及内存中的数据时,要指定数据所在的内存单元的地址,地址的输入格式是: [段地址]: [位移]。
如果没有输入地址,DEBUG将假定为当前内存段,从位于地址100H的字节开始。
前100H字节保留给程序段前缀使用(称PSP结构,包含程序执行的各种信息),该区域用于建立DOS与程序之间的联系。
在DEBUG中,使用四位十六进制数表示地址(0~9,A~F)。
DEBUG输入数据时有两种方法: 提示方法和非提示方法。
在提示方法下,输入要求输入数据的命令,后跟保存数据的地址。
执行后可以看到该地址中已有的内容及一个冒号提示符。
此时可以在提示符下输入一个新的值或者按下回车键或CTRL+C回到“—”提示符。
在非提示方法下,输入保持数据的内存地址以及要输入的数据。
DEBUG的启动:进入DOS状态下,键入DEBUG ,按ENTER键,如:C:\>DEBUG ,则屏幕显示:-符号“-”是进入DEBUG的提示符,在该提示符下可键入任意DEBUG命令。
DEBUG的退出:在DEBUG的提示符后输入Q命令,按ENTER键,则退出DEBUG返回DOS。
DEBUG的使用:在DEBUG的提示符后输入DEBUG命令,按ENTER键。
二、DEBUG 命令详解★A命令格式:A[地址]功能:将指令直接汇编成机器码输入到内存中。
参数说明:[地址]指定存放键入汇编语言指令的内存单元的位置。
A命令使用说明:用于小段程序的汇编及修改目标程序,所有输入的数字均默认为十六进制,并且不需要以“h”字符结尾。
用户装入内存的汇编语句是连续存放的,若没有指定地址,并且前面没有使用汇编命令,该语句被汇编到CS:0100区域,则在它上次停止处开始汇编。
注意:1. 直接在A命令下输入跳转指令时,跳转指令后应跟跳转到的语句所在内存单元的地址,不能跟标号;使用跳转指令时,可以指定跳转指令的属性:near,far。
near 前缀可以缩写为 ne。
如下例所示:-a0100:01000100:0100 jmp 1020100:0102 jmp near 1050100:0105 jmp far 10a2. 汇编语言指令所涉及到的操作数可以是字操作数也可以是字节操作数,在语句不能判别操作数的类型时,可以使用前缀 word ptr 或者前缀 byte ptr 指定操作数的类型。
缩写分别是:wo 和 by。
如下列所示:-a0100:01000100:0100 dec word ptr [100]0100:0102 dec wo ptr [100]0100:0105 dec byte ptr [100]2.在DEBUG下,应注意区分立即操作数和内存地址的操作数,使用包括在中括号 ([ ])中的操作数表示内存地址。
3.在DEBUG下,能够使用的伪指令仅有DB和DW两个,分别用于定义字节和字操作数,此时定义的操作数被存放在该定义指令所在的内存空间中。
如下列所示(注意内存空间的变换,why?):-a 0100:01000100:0100 DB ‘ABCDEFG’0100:0107★C命令格式:C[源地址范围][目的地址]功能:比较两内存区域中的内容是否相同。
若不同则按字节显示其地址和内容,若相同则不显示任何内容。
参数说明:[源地址范围]指定要比较的内存第一个区域的起始和结束地址,或起始地址和长度。
[目的地址] 指定要比较的第二个内存区域的起始地址。
C命令使用说明:如果 [源地址范围]和[目的地址]中内存单元的数据相同,Debug 将不显示任何内容而直接返回到 Debug 提示符。
如果有差异,Debug将按如下格式显示:[源地址] 源地址中内容目的地址中内容[目的地址]如下列所示:-C CS:100 105 DS:300;(假定CS=0AF6;DS=1000)0AF6:0100 88 00 1000:03000AF6:0101 C0 00 1000:03010AF6:0102 89 00 1000:03020AF6:0103 D8 00 1000:03030AF6:0104 65 00 1000:03040AF6:0105 66 00 1000:0305★D命令格式:D[地址] 或D[起始地址][目的地址]功能:以内存映象方式显示内存中的数据。
参数说明:指定要显示内容的内存单元的起始地址和结束地址,或起始地址和长度。
如果不指定 [地址],Debug将从以前 d 命令中所指定的地址范围的末尾开始显示 128个字节的内容;第一次从DS:100处开始显示。
D命令使用说明:当使用d 命令时,Debug分两个部分显示内存单元内容:左边显示内存单元中存放的十六进制数;右边显示左边的十六进制所表示的ASCII字符,所有不可打印字符用句号(.)表示。
每行显示16个字节的内容,在第八和第九个字节之间有一个连字符“–“。
从键盘键入下面命令:-d cs:100 10fDebug 按以下格式显示地址范围中的内容(假定CS=0AF6):0AF6:0100 77 61 6E 67 78 69 61 6F-69 6A 6B FF 0E 00 01 FF wangx iaoijk…..键入以下命令,Debug 将从 CS:100 开始显示 20h 个字节的内容:-d cs:100 l 20键入以下命令,Debug 将显示范围从 DS 段的 100h 到 115h 中所有字节的内容:-d 100 115注意:在D命令中若不指定段寄存器,默认规定为DS。
★E命令格式:E[地址] [字节串] 或E[地址]功能:从指定的地址开始修改内存值。
参数说明:[地址]指定存放[字节串]第一个内存的位置,[字节串]是要放入内存单元中的数据。
E命令使用说明:当使用E命令时,有两种使用格式:1、用E命令中包含的字节串替换从指定的地址开始的多个字节的内容;2、E命令后不跟字节串,则允许按顺序方式显示和修改内存值,按下空格键显示下一字节内容,若想修改,直接输入相应值;按下减号键显示上一字节内容,若想修改,直接输入相应值。
3、停止执行 e 命令。
按 ENTER 键。
在任何字节位置都可以按 ENTER。
注意:1. 若地址部分只输入偏移量,则E 命令认为段包括在DS寄存器中。
2.[字节串]的值可以是十六进制字节或字符串。
使用空格、逗号或制表符来分隔值。
必须将字符串包括在单或双引号中。
3.使用E命令后,内存单元中原来的数据将丢失,或者说被新输入的数据覆盖。
从键盘键入下面命令:-E 100Debug 按下面的格式显示第一个字节的内容(假定DS=0AF6):0AF6:0100 EB.要将该值更改为 61,请在插入点键入(使用符号”_”表示) 61,如下所示:0AF6:0100 AB.61_此时,若按下空格键,将显示下一个内存单元中的内容:0AF6:0100 AB.61 EF._此时,又可以在插入点键入新的内容,改写当前显示的内存内容,若不需要改写当前内存单元的内容,可以直接按下空格键,将显示下一个内存单元的内容,如此,一直到按 ENTER 停止 e 命令并返回到 Debug 提示符下。
若使用减号键,操作和按下空格键一样,区别在于将显示上一个内存单元的内容。
注意:使用该种方法,只能键入16进制数,不能键入字符串。
从键盘键入下面命令:-E DS:100 EF’ABC’41则执行上面的命令后,从DS:100内存单元开始的5个连续的字节中的内容将被数据0EFH,字符“A”“B”“C”的ASCII码和数据41H替换。
★F命令格式:F[地址范围] [字节或字节串]功能:将要填写的字节或字节串填入由地址范围指定的存储器中。
参数说明:[地址范围]指定要填充内存区域的起始和结束地址,或起始地址和长度。
[字节或字节串] 指定要输入的数据,可以由十六进制数或引号包括起来的字符串组成。
F命令使用说明:如果[地址范围]包含的字节数比[字节或字节串]中的数值大,Debug 将对[字节或字节串]中提供的值反复使用,直到[地址范围]中的所有字节全部填充。
如果在[地址范围]中的任何内存单元损坏或不存在,Debug 将显示错误消息并停止f命令。
如果[字节或字节串]包含的数值多于[地址范围]中的字节数,Debug 将忽略[字节或字节串]中额外的值。
从键盘键入下面的命令:-F 1000:100 105 ‘ABCDEFG’指令执行后,DEBUG使用’ABCDEF’填充1000:100到1000:105内存单元。
从键盘键入下面的命令:1000:100 150 40 45 51 52 44指令执行后,DEBUG反复使用40,45,51,52,44填充从1000:100 到1000:150的内存单元,直到50h 个字节全部填满为止。
★G命令格式:G[=起始地址] [[断点]……]功能:执行正在调试的程序,当达到断点时停止执行,并且显示寄存器标志和下一条要执行的命令。
参数说明:[=起始地址]指定当前在内存中要开始执行的指令所在的内存单元的地址。
如果不指定[=起始地址],DEBUG将从 CS:IP 寄存器中的当前地址开始执行程序。
[[断点]……] 指定可以设置为 g 命令的部分的 1 到 10 个临时断点。
G命令使用说明:G命令中的=不能省略,可以只给出偏移地址,默认段地址为当前的CS;若省略=,则该地址就成为G命令中的断点地址。
程序将从指定的开始地址不停的执行程序,一直到遇到结束指令为止,并显示“Program terminated normally”。
断点地址只对本次G命令有效;下一条G命令若需要断点地址,应重新进行指定。
当使用G命令执行程序到断电地址后,显示断点地址处的指令和寄存器的内容。
注意:断点地址应为一条指令在内存单元中的首字节地址。
★H命令格式:H[数值][数值]功能:分别显示两个十六进制数相加的和以及第一个数减去第二个数的差。
参数说明:[数值]表示从0 到FFFFh 范围内的任何十六进制数字。
H命令使用说明: Debug 首先将指定的两个参数相加,然后用第一个参数中减去第二个参数。
并将计算的结果以4位16进制形式显示在下一行中:先显示计算和,然后显示计算差。