调试工具DEBUG和第一个汇编程序(2)
Mov ax,ffff Mov ds,ax Mov ax,2000 Mov ss,ax Mov sp,0100
Mov ax,[0] Add ax,[2] Mov bx,[4]
Add bx,[6]
Push ax ;修改的内存单元的地址是
Push bx 修改的内存单元的地址是内容为Pop ax Pop bx
Push [4] 修改的内存单元的地址是内容为 Push [6] 内容为
实验一b 用DEBUG调试程序
一、实验目的
学习利用DEBUG调试程序的基本思想及方法
二、实验环境:
1. 硬件:PC微机
2. 软件:DOS系统、EDIT.EXE (Notepad++.exe更好用些,见FTP)、MASM.EXE、
LINK.EXE、DEBUG.EXE
三、实验内容
利用DEBUG调试程序,可以将一个可执行程序(如.EXE、.COM等)装入内存中,并接管对程序运行的控制权,通过采取如反汇编、断点运行、单步执行、寄存器内容修改等方法,对可执行程序进行跟踪、调试,以找出其中的设计错误,然后再对源程序进行相应修改,重新生成正确的可执行程序。 1. 准备被调试程序:
假定所有有关文件均在当前路径C:\MYTEST>下,按照实验一的步骤生成一个被调试的可执行 (以下是使用Notepad++编辑源文件,会对不同关键字显示颜色)
2.
进入DEBUG环境:(其中斜体部分由键盘输入。
)
其中,短线‘-’作为DEBUG环境的操作提示符,在此提示符下,可以输入各种DEBUG命令,对可执行程序TEST.EXE进行跟踪调试。 3. 主要调试命令:
1) 反汇编命令U:将存储器中的二进制数据翻译成较有意义的助记符形式,以帮助理
解。一般常用以下格式: a) -U↘:从当前IP处开始,对连续约32字节内容反汇编。如对TEST.EXE,刚装
入DEBUG时的IP=0000,则在输入U命令后有如下显示:
在上例中,12B7:0000表示CS:IP的内容(其中CS的值是动态值);B8B612代表该处存放的二进制数据,亦即指令MOV AX,12B6的机器代码;当连续约32字节的数据反汇编完后,重新回到DEBUG提示符“-”下,如果再键入U命令,则将继续对后面的内存区反
汇编。
特别应该注意的是,由于反汇编命令针对内存区的二进制数据,而被调试程序仅占内存区的某一部分,故反汇编出来的内容并非全是被调试程序的代码,如上例中的JMP 0063以后的部分,显然不是TEST.EXE的内容。另外还需注意,DEBUG默认使用十六进制。
b) –U 0123↘:从指定的IP=0123处开始,对连续约32字节内容反汇编。
c) –U 0123 0143↘:从指定的IP=0123处开始反汇编,直至指定的0143处结束。 2) 显示寄存器命令R:显示或修改寄存器的内容。一般常用以下形式:
a) -R↘:显示所有寄存器当前的内容及当前将执行的指令。如对TEST.EXE,在程
序运行之前,键入R命令:
在显示寄存器内容时,标志寄存器F(或程序状态字寄存器PSW)表示成各个分离的标志
b) -R AX↘:显示指定的AX寄存器当前的内容,并等待键入新值;如果不作修改,
可直接回车。如:
c) -R F↘:显示标志寄存器F各个标志位的内容,并等待键入新的标志位;如果不
作修改,可直接回车。如:
3)运行命令G:使程序在DEBUG控制下运行,一般有全程、断点运行两种方式。 a) -G↘:控制程序由当前IP处运行,直至程序结束。如果当前IP为初始值,其作
用则相当于直接在DOS下运行程序,一般用于快速观察程序的运行情况。 b) -G 0123↘:控制程序由当前IP处运行,直至指定的断点IP=0123H处,程序暂
停,显示各个寄存器的当前值及断点处指令,然后返回DEBUG提示符“-”下。如对TEST.EXE,若想观察字符串显示的入口参数是否设置好,则可以断点运行至000A处:
断点一般选取在需要观察的地方,当程序停下来后,可以根据各方面的情况(如寄存器、缓
冲区、标志等)来判断程序是否运行正确。
3) 单步命令T:控制程序运行一条指令后暂停,显示各个寄存器的当前值及断点处指
令,然后返回DEBUG提示符“-”下。如对TEST.EXE,若当前IP为初始值,则键入T命令后有如下显示:
单步命令一般用于需对程序运行作仔细分析的地方,如判断分支转移、观察运算结果等。若能综合运用断点及单步指令,则可大大提高DEBUG 调试的速度及效率。但应注意,当IP指针位于INT 21H一类指令处时,执行T命令将会使程序进入该功能调用子程序中,因此,这种情况下最好不用T命令,而用断点运行命令跳过该类功能调用指令。
4) 显示内存命令D:以十六进制及ASCII两种方式显示内存区的二进制数据,通常
用来观察数据段内的缓冲区内容。一般常用以下二种形式: a) -D↘:从0000单元开始,连续显示128个内存单元的内容,如果继续键入D命
令,则继续显示后128个单元内容。如对TEST.EXE,若想观察字符串显示时的字符串内容是否正确,则可在程序断点运行至000A处,键入D命令:
在上例中,128个单元分成8行,每行16个单元,每个单元的内容分别以十六进制形式和ASCII码形式显示。如果该单元的内容不是可显示字符,则在ASCII区内显示为“.”。
b) –D 0123 0143↘:从指定的0123单元开始显示,直至指定的0143单元结束。 5) 汇编命令A:用于在DEBUG环境下直接键入汇编语言语句、生成较简单的可执行
代码而不必经过完整的汇编语言编程步骤,或者用来在调试过程中临时修改某条指令。如:
当键入汇编命令A后,将从当前IP或指定地址处提示输入汇编语句,每输入一条语句,DEBUG将其汇编成机器码,并存入相应的存储单元中,然后地址自动增加,继续提示输入下一条语句;如果直接回车,则结束汇编命令。特别应注意的是,DEBUG默认使用十六进制,故在输入时不能使用H。
6) 装载命令L:用来将被调试程序重新装载进内存中,一般用于程序运行结束后需继
续调试程序时,或需从头开始调试程序时。如对TEST.EXE:
8)退出命令Q:键入此命令,即退出DEBUG状态,返回DOS。
4.实验任务:将内存数据段从2000H开始的连续100个字节的内容传送到附加段3000H开始的内存区域,在DEBUG下调试程序并查询运行的结果。 参照教材99页例
3.75
附教材99页例3.75
具体代码如下:
操作步骤如下:
编译得到mov100.exe后
debug mov100.exe -t
-t -t
-d ds:2000 -d es:3000 -g
-d ds:2000 -d es:3000
…… 此处隐藏:1214字,全部文档内容请下载后查看。喜欢就下载吧 ……相关推荐:
- [专业资料]《蜜蜂之家》教学反思
- [专业资料]过去分词作定语和表语1
- [专业资料]苏州工业园区住房公积金贷款申请表
- [专业资料]保安管理制度及处罚条例细则
- [专业资料]2018年中国工程咨询市场发展现状调研及
- [专业资料]2015年电大本科《学前教育科研方法》期
- [专业资料]数字信号处理实验 matlab版 离散傅里叶
- [专业资料]“十三五”重点项目-虎杖白藜芦醇及功
- [专业资料]2015-2020年中国竹木工艺市场需求及投
- [专业资料]国际贸易理论与实务作业五:理论案例分
- [专业资料]财政部修订发布事业单位会计制度
- [专业资料]BCA蛋白浓度测定试剂盒(增强型)
- [专业资料]工程进度总计划横道图模板(通用版)
- [专业资料]七年级地理同步练习(天气与气候)
- [专业资料]X光安检机介绍火灾自动报警系统的组成
- [专业资料]衢州市人民政府办公室关于印发衢州市区
- [专业资料]经济全球化及其影响[1]
- [专业资料]质粒DNA限制性酶切图谱分析
- [专业资料]国家安全人民防线工作“六项”制度
- [专业资料]劳动力投入计划及保证措施
- 电子账册联网监管培训手册
- 人教版语文七年级上第1课《在山的那边
- 对我区担保行业发展现状的思考与建议
- 平面四边形网格自动生成方法研究
- 2016年党课学习心得体会范文
- 如何设置电脑定时关机
- 全球最美人妖排行榜新鲜出炉
- 社会实践调查报告及问卷
- Visual Basic习题集
- 《鱼我所欲也》课件2
- 浙江省会计从业资格考试试卷
- 全遥控数字音量控制的D 类功率放大器资
- 鞍钢宪法与后福特主义
- 电表的改装与校准实验报告(1)
- 2014年高考理科数学真题解析分类汇编:
- Windows 7 AIK 的使用
- 风电场全场停电事故应急处置方案
- 化工原理选填题题库(下)
- 关于产学研合作教育模式的学习与思考
- 西安先锋公馆项目前期定位报告




