ImageVerifierCode 换一换
格式:DOCX , 页数:11 ,大小:71.89KB ,
资源ID:5263658      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/5263658.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(实验二Debug的使用1.docx)为本站会员(b****3)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

实验二Debug的使用1.docx

1、实验二 Debug的使用1实验二 Debug的使用(一)一、实验要求和目的 1熟悉Debug环境。 2掌握常用Debug命令的基本操作。二、软硬件环境 1硬件环境:微机CPU 486以上,500MB以上硬盘,32M以上内存; 2软件环境:装有MASM 5.0、DEBUG、LINK和EDIT等应用程序。三、实验涉及的主要知识单元在以后所有的实验中,都将用到Debug程序,首先学习一下它的主要用法。(1) 什么是Debug?Debug是DOS、Windows都提供的实模式(8086方式)程序的调试工具。使用它,可以查看CPU各种寄存器中的内容、内存的情况和在机器码级跟踪程序的运行。(2) 我们用到

2、的Debug功能 用Debug的R命令查看、改变CPU寄存器的内容; 用Debug的D命令查看内存中的内容; 用Debug的E命令改写内存中的内容; 用Debug的U命令将内存中的机器指令翻译成汇编指令; 用Debug的T命令执行一条机器指令; 用Debug的A命令以汇编指令的格式在内存中写入一条机器指令。Debug的命令比较多,共有20多个,但上述6个命令是和汇编语言学习密切相关的。在以后的实验中,我们还会用到一个P命令。(3) 进入DebugDebug是在DOS方式下使用的程序。我们在进入Debug前,应先进入到DOS方式。用以下方式可以进入DOS: 重新启动计算机,进入DOS方式,此时进

3、入的是实模式的DOS。 在Windows中进入DOS方式,此时进入的是虚拟8086模式的DOS。下面说明在Windows XP中进入Debug的一种方法,在Windows 98中进入的方法与此类似。单击【开始】菜单中的【运行】命令,打开【运行】对话框,在文本框中输入“command”后,单击【确定】按钮。 图2-1 选择【运行】命令 图2-2 在文本框中输入“command”进入DOS方式后,如果显示为窗口方式,可以按下Alt+Enter键将窗口变为全屏方式。然后运行Debug程序,如图2-3所示,这个程序在Windows 98中通常在C:windows98command下,在Windows

4、XP中通常在C:winntsystem下。由于系统指定了搜索路径,所以在任何一个路径中都可以运行。图2-3 运行Debug程序(4) 用R命令查看、改变CPU寄存器的内容我们已知道了AX、BX、CX、DX、CS、IP这6个寄存器,现在看一下它们之中的内容,如图2-4所示。其他寄存器SP、BP、SI、DI、DS、ES、SS、标志寄存器等先不予理会。图2-4 使用R命令查看CPU中各个寄存器中的内容注意CS和IP的值,CS=0CA2,IP=0100,也就是说,内存0CA2:0100处的指令为CPU当前要读取、执行的指令。在所有寄存器的下方,Debug还列出了CS:IP所指向的内存单元处所存放的机器

5、码,并将它翻译为汇编指令。可以看到,CS:IP所指向的内存单元为0CA2:0100,此处存放的机器码为027548,对应的汇编指令为ADD DH,DI+48(这条指令的含义先不必深究)。还可以用R命令来改变寄存器中的内容,如图2-5所示。图2-5 用R命令修改寄存器AX中的内容若要修改一个寄存器中的值,比如AX中的值,可用R命令后加寄存器名来进行,输入“r ax”后按Enter键,将出现“:”作为输入提示,在后面输入要写入的数据后按Enter键,即完成了对AX中内容的修改。若想看一下修改的结果,可再用R命令查看,如图2-6所示。图2-6 用R命令修改CS和IP中的内容在图2-6中,一进入Deb

6、ug,用R命令查看,CS:IP指向0B39:0100,此处存放的机器码为40,对应的汇编指令是INC AX;接着,用R命令将IP修改为200,则CS:IP指向0B39:0200,此处存放的机器码为5B,对应的汇编指令是POP BX;接着,用R命令将CS修改为ff00,则CS:IP指向ff00:0200,此处存放的机器码为51,对应的汇编指令是PUSH CX。(5) 用Debug的D命令查看内存中的内容用Debug的D命令,可以查看内存中的内容,D命令的格式较多,我们这里只介绍在本次实验中用到的格式。如果想知道内存10000H处的内容,可以用“d 段地址:偏移地址”的格式来查看,如图2-7所示。

7、图2-7 用D命令查看内存1000:0处的内容要查看内存10000H处的内容,首先将这个地址表示为段地址:偏移地址的格式,可以是1000:0,然后用“d 1000:0”列出1000:0处的内容。使用“d 段地址:偏移地址”的格式,Debug将列出从指定内存单元开始的128个内存单元的内容。图2-7中,在使用d 1000:0后,Debug列出了1000:01000:7F中的内容。使用D命令,Debug将输出3部分内容,如图2-7所示。 中间是部分从指定地址开始的128个内存单元的内容,用十六进制的格式输出,每行的输出从16的整数倍的地址开始,最多输出16个单元的内容。从图中,我们可以知道,内存1

8、000:0单元中的内容是72H,内存1000:1单元中的内容是64H;内存1000:01000:F中的内容都在第一行;内存1000:10中的内容是6D,内存1000:1处的内容是61;内存1000:101000:1F中的内容都在第二行。注意在每行的中间有一个“-”,它将每行的输出分为两部分,这样便于查看。比如,要想从图中找出,1000:6B单元中内容,可以从1000:60找到行,“-”前面是1000:601000:67的8个单元,后面是1000:681000:6F的8个单元,这样我们就可以从1000:68单元向后数3个单元,找到1000:6B单元,可以看到,1000:6B中的内容为67H。 左

9、边是每行的起始地址。 右边是每个内存单元中的数据对应的可显示的ASCII码字符。比如:内存单元1000:0、1000:1、1000:2中存放的数据是72H、64H、73H,它对应的ASCII字符分别是“r”、“d”、“s”;内存单元1000:36中的数据是0AH,它没有对应可显示的ASCII字符,Debug就用“.”来代替。注意: 我们看到的内存中的内容,在不同的计算机中是不一样的,也可能每次用Debug看到的内容都不相同,因为我们用Debug看到的都是原来就在内存中的内容,这些内容受随时都有可能变化的系统环境的影响。当然,我们也可以改变内存、寄存器中的内容。使用d 1000:9查看1000:

10、9处的内容,Debug将怎样输出呢?如图2-8所示。图2-8 查看1000:9处的内容Debug从1000:9开始显示,一直到1000:88,一共是128个字节。第一行中的1000:01000:8单元中的内容不显示。在一进入Debug后,用D命令直接查看,将列出Debug预设的地址处的内容,如图2-9所示。在使用“d 段地址:偏移地址”之后,接着使用D命令,可列出后续的内容,如图2-10所示。图2-9 列出Debug预设的地址处的内容图2-10 列出后续的内容也可以用指定D命令的查看范围,此时采用“d 段地址:起始偏移地址 结尾偏移地址”的格式。比如要看1000:01000:9中的内容,可以用

11、“d 1000:0 9”实现。如图2-11所示。图2-11 查看1000:01000:9单元中的内容如果我们就想查看内存单元10000H中的内容,可以用图2-12中的任何一种方法看到,因为图中的所有“段地址:偏移地址”都表示了10000H 这一物理地址。图2-12 用三种不同的段地址和偏移地址查看同一个物理地址中的内容(6) 用Debug的E命令改写内存中的内容可以使用E命令来改写内存中的内容,比如,要将内存1000:01000:9单元中的内容分别写为0、1、2、3、4、5、6、7、8、9,可以用“e 起始地址 数据 数据 数据”的格式来进行,如图2-13所示。图2-13 用E命令修改从100

12、0:0开始的10个单元的内容图2-13中,先用D命令查看1000:01000:f单元的内容,再用E命令修改从1000:0开始的10个单元的内容,最后用D命令查看1000:01000:f中内容的变化。也可以采用提问的方式来一个一个地改写内存中的内容,如图2-14所示。图2-14 用E命令修改从1000:10开始的4个单元的内容如图2-14中,可以用E命令以提问的方式来逐个地修改从某一地址开始的内存单元中的内容,以从1000:10单元开始为例,步骤如下: 输入e 1000:10 ,按Enter键。 Debug 显示起始地址1000:0010,和第一单元(即1000:0010单元)的原始内容:6D,

13、然后光标停在“.”的后面提示输入想要写入数据,此时可以有两个选择:其一为输入数据(我们输入的是0),然后按空格键,即用输入的数据改写当前的内存单元;其二为不输入数据,直接按空格键,则不对当前内存单元进行改写。 当前单元处理完成后(不论是改写或没有改写,只要按了空格键,就表示处理完成),Debug将接着显示下一个内存单元的原始内容,并提示读者进行修改,读者可以用同样的方法处理。 所有希望改写的内存单元改写完毕后,按Enter键,E命令操作结束。可以用E命令向内存中写入字符,比如:用E命令从内存1000:0开始写入:数值1、字符“a”,数值2,字符“b”,数值3,字符“c”,可采用图2.42中所示

14、的方法进行:从图2-15中可以看出,Debug对E命令的执行结果是,向1000:0、1000:2、1000:4单元中写入数值1、2、3,向1000:1、1000:3、1000: 5单元中写入字符“a”、“b”、“c”的ASCII码值:61H、62H、63H。也可以用e命令向内存中写入字符串,比如:用E命令从内存1000:0开始写入:数值1、字符串“a+b”、数值2、字符串“c+”、字符3、字符串“IBM”。如图2-16所示。图2-15 用E命令向内存中写入字符图2-16 用E命令向内存中写入字符串(7) 用E命令向内存中写入机器码,用U命令查看内存中机器码的含义,用T命令执行内存中的机器码。如

15、何向内存中写入机器码呢?我们知道,机器码也是数据,当然可以用E命令将机器码写入内存。比如要从内存1000:0单元开始写入这样一段机器码:机器码 对应的汇编指令b80100 mov ax,0001b90200 mov cx,000201c8 add ax, cx可用如图2-17中所示的方法进行。图2-17 用E命令将机器码写入内存如何查看我们写入的或内存中原有的机器码所对应的汇编指令呢?可以用U命令进行。比如可以用U命令将从1000:0开始的内存单元中的内容翻译为汇编指令,并显示出来。如图2-18所示。图2-18中,首先用E命令向从1000:0开始的内存单元中写入了8个字节的机器码;然后用D命令

16、查看内存1000:01000:1f中的数据(从数据的角度看一下我们写入的内容);最后用U命令查看从1000:0开始的内存单元中的机器指令和它们所对应的汇编指令。U命令的显示输出分为3部分:每一条机器指令的地址、机器指令、机器指令所对应的汇编指令。我们可以看到:1000:0 处存放的是我们写入的机器码b8 01 00所组成的机器指令,对应的汇编指令是mov ax,1;1000:3 处存放的是我们写入的机器码b8 02 00所组成的机器指令;对应的汇编指令是mov cx,2;1000:6 处存放的是我们写入的机器码01 c8所组成的机器指令;对应的汇编指令是add ax,cx;1000:8 处存放

17、的是内存中的机器码03 49 42所组成的机器指令;对应的汇编指令是add cx,bx+di+42。图2-18 用U命令将内存单元中的内容翻译为汇编指令显示由此,我们可以再一次看到内存中的数据和代码没有任何区别,关键在于如何解释。如何执行我们写入的机器指令呢?使用Debug的T命令可以执行一条或多条指令,简单地使用T命令,可以执行CS:IP指向的指令,如图2-19所示。图2-19 使用T命令执行CS:IP指向的指令图2-19中,首先用E命令向从1000:0开始的内存单元中写入了8个字节的机器码;然后用R命令查看CPU中寄存器的状态,可以看到,CS=0b39H、IP=0100H,指向内存0b39

18、:0100;若要用T命令控制CPU执行我们写到1000:0的指令,必须先让CS:IP指向1000:0;接着用R命令修改CS、IP中的内容,使CS:IP指向1000:0。完成上面的步骤后,就可以使用T命令来执行我们写入的指令了(此时,CS:IP指向我们的指令所在的内存单元)。执行T命令后,CPU执行CS:IP指向的指令,则1000:0处的指令b8 01 00(mov ax,0001)得到执行,指令执行后,Debug显示输出CPU中寄存器的状态。注意,指令执行后,AX中的内容被改写为1,IP改变为IP+3(因为mov ax,0001的指令长度为3个字节),CS:IP指向下一条指令。接着图2-19,

19、我们可以继续使用T命令执行下面的指令。如图2-20所示。图2-20 用T命令继续执行在图2-20中,用T命令继续执行后面的指令,注意每条指令执行后,CPU相关寄存器内容的变化。(8) 用Debug的A命令以汇编指令的形式在内存中写入机器指令。前面我们使用E命令写入机器指令,这样做很不方便,最好能直接以汇编指令的形式写入指令。为此,Debug提供了A命令。A命令的使用方法如图2-21所示。图2-21 用A命令向从1000:0开始的内存单元中写入指令图2-21中,首先用A命令,以汇编语言向从1000:0开始的内存单元中写入了几条指令,然后用D命令查看A命令的执行结果。可以看到,在使用A命令写入指令

20、时,我们输入的是汇编指令,Debug将这些汇编指令翻译为对应的机器指令,将它们的机器码写入内存。使用A命令写入汇编指令时,在给出的起始地址后直接按Enter键表示操作结束。如图2-22中,简单地用A命令,从一个预设的地址开始输入指令。图2-22 从一个预设的地址开始输入指令四、实验内容与步骤使用Debug,将下面的程序段写入内存,逐条执行,记录每条指令执行后,CPU中相关寄存器中内容的变化。机器码 汇编指令b8 20 4e mov ax,4E20H05 16 14 add ax,1416Hbb 00 20 mov bx,2000H01 d8 add ax,bx89 c3 mov bx,ax01 d8 add ax,bxb8 1a 00 mov ax,001AHbb 26 00 mov bx,0026H00 d8 add al,bl00 dc add ah,bl00 c7 add bh,alb4 00 mov ah,000 d8 add al,bl04 9c add al,9CH提示: 可用E命令和A命令以两种方式将指令写入内存。注意用T命令执行时,CS:IP的指向。五、思考与练习PC机主板上的ROM中写有一个生产日期,在内存FFF00HFFFFFH的某几个单元中,请找到这个生产日期并试图改变它。

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1