本栏目责任编辑:谢媛媛软件设计开发./厂
浅谈Debug调试汇编语言程序的方法
计博婧
(池州学院,安徽池州247100)
摘要:本文浅谈了Debug在汇编语言程序上机调试中的基本步骤和方法,帮助学生如何利用Debug工具更好地学习汇编语言,对于
汇编语言教学具有一定的参考价值。
关键词:汇编语言;Debug;调试:命令
中图分类号:TP393文献标识码:A文章编号:1009-3044(2008)09一11653-03
TheMethodoftheDebugDebuggingAssemblyLanguageProcedure’
jiBo-jing
(ChizhouImtitute,Chizhou247100,China)
Abstract:ThisarticlediscussedshallowlybasicstepandmethodofDebugintheassemblylanguageprocedurehands—ondebugging,andthestudentshowtOst.dEtheassemblylanguagewellbyusingtheDebugt001.Ithascertainreferencevalueregardingtheassembly
help
languageteaching.
Keywords:Assemblylanguage;Debug;Debugging;,Order
1引言
汇编语言是一种介于计算机能直接识别、执行的机器语言和高级语言之间的程序设计语言。汇编语言最显著的特点是它与机
器硬件关系密切,与机器语言一一对应,可以编写出在“时空”两方面最有效率的程序,因此在系统软件开发、实时工业控制等场合
中是必不可少的软件开发工具。现在大多数高校的计算机专业均将《汇编语言程序设计》作为必修课程,通过该课程的教学,有助于
培养学生的程序设计方面的能力。同时可以让学生从根本上认识、理解计算机的工作原理,这对《接口技术》、《单片机》等后续课程
的学习是非常有帮助的。但是在具体的教学过程中,尤其是在上机环节里学生普遍感到汇编语言程序难以调试,以至于不能很好的
理解课堂上传授的理论知识.由此引发学生刚接触这门课程时学习兴趣不高。好在系统为我们提供了Debug工具,利用好这个调试
工具将很大程度地帮助于我们调试好汇编语言程序,从而提高了学生的学习兴趣和教学效果。下面笔者结合教学实践就如何使用
Debug来调试汇编语言程序这个问题谈谈自己的基本方法。
2结合教学实践介绍Debug调试汇编语言程序的基本方法
2.1调试程序前的准备工作
2.1.1熟悉Debug工具中常用的命令的使用方法
Debug提供了一系列操作命令,具有很强的调试功能,涉及的内容也相当广。下面简要介绍在程序调试中使用的一些常用命令。
R~显示寄存器的内容A一对助记符指令进行汇编
D~显示内存单元的内容G一一运行程序
U~对二进制指令代码进行反汇编Q一退出Debug
E~修改存储区数据’r-一单步执行程序
2.1.2借助参考文件
利用汇编和连接过程中产生的.LST或.MAP文件信息。记下调试中某些关键变量、标号、子程序的地址,为便于调试中查看中间
结果和设置断点位置。
2.1.3制定调试步骤方案
多数同学在上机过程中.完成汇编语言源程序的编辑、汇编、连接以及进入Debug调试环境后,普遍感到束手无策,不知从何处
开始调试.更无法得知程序的结果是否正确。面临这种问题,往往笔者在上机教学中告诉学生首先要回顾一下程序所要求实现的功能,其次借助.LST或.MAP文件信息分析出程序的已知条件,比如已知变量的值及存放的内存单元地址,进而可将已知变量数据所
存储的示意图画在纸上.然后分析出程序运行的正确结果及所存放的具体地址。上述问题正确分析完后就可以制定出一个较具体
的调试步骤方案。
2.2调试过程的具体实施
2.2.1启动Debug,
收稿日期:2008—01—11
作者简介:计博婧(1982-)。女,安徽池州人,学士,助教,研究方向:计算机程序设计研究。
1653
?软件设计开发??????本栏目责任编辑:谢媛媛
在完成调试程序前的准备工作之后,就启动Debug程序,装入被调试程序进入调试环境。注意,进入Debug时一定要以完整的形式指定用户可执行程序文件名(完整路径、文件名.扩展名)。装入被调试程序。
2.2.2观察寄存器和数据单元的初始值
在装入用户程序后,先用R命令显示寄存器的初始值,通过CS和SS寄存器可以了解到程序代码段和堆栈段在内存中的分布位置;从IP可以知道第一条可执行指令在代码段中的起始地址;DS和ES中的值是相同的,注意它们并不是用户程序数据段的段基值,而是PsP的段基值。然后选择U命令或者查看连接过程中产生的.MAP文件来找出用户程序数据段的段值,如果用户想查看数据段中的内容。还必须提供变量的偏移地址,这时可以通过.[ST文件或者画出变量存储示意图分析出数据段中定义的变量的偏移量。紧接着用D命令和已查到的数据段段基值、变量偏移地址来查看用户数据段中存储的内容。此时就可以对程序的各个功能段在内存中的存储分布情况有了具体的了解。便于后续的调试。
2.2.3目标代码的反汇编
。
在运行程序之前。还须对要执行的代码段进行反汇编。只有这样才能确定待运行的程序段的起始地址、断点地址。
2.2.4选用适当的运行程序命令。运行用户程序
Debug提供了G、T、P三个运行程序命令,这就要求我们要灵活的选用。比如,对执行顺序程序部分,通常使用G命令。对于要特别仔细查看的指令,可选用P命令或T命令,一般建议在单步执行时,选用P命令,在需要考察LOOP循环,进入子程序或软中断调用时,使用T命令进行跟踪运行。
2.2.5断点的设置
在程序的各功能段调试中,可能包含有转移分支指令。往往需要对分支的原因、分支的正确性进行验证。这时就需要在G命令中加上断点参数。
2.2.6观察运行结果
汇编语言源程序运行后。大多数情况下运行结果并不直观的显示在屏幕上,这时就可以选择D命令或者R命令来显示出存放在内存单元或寄存器中的运行结果。
如果用户希望像高级语言那样,程序运行结果可以直接显示在屏幕上,可以调用系统提供的DOS系统功能调用或者BIOS中断调用来显示。用户可以结合题目的要求和分析,对运行结果作出判断,从而可得知用户程序是否正确。
2.3举例说明Debug在汇编语言中的调试方法
2.3。1以下是该程序的功能要求和源程序清单:
;定义源字符串变量sstr的值为小写字母表,用程序将它复制到目标字符串dstr中。
datasegment
ss口db'abcdefghijklmnopqrstuvwxyz。
dataends
extrasegment’
dstrdb26dup(?)
extraends
codesegment
assumec8;code,ds:data,es:extra
start:movax。data,.
movds。ax
movax,extra
nlove8.ax
leasi,sstr
leadi。dstr
movex,26
eld
rep/novsb
nlOVah,4ch;dos系统功能调用,标志源程序结束
int21h
codeends
endstart
2.3.2具体调试过程…
为了方便说明给该程序命名为“mycopy.asm”,首先在DOS环境下完成对该程序的编辑输入、汇编、连接。接着启动Debug将生皎的mycopy.exc文件装人内存,输入R命令后,屏幕出现了各个寄存器的当前值,如下所示:
E:\^4ASM>debugmycopy.exe
—r
AX=0000BX=OOOOCX=005CDX=0000SP=0000BP=0000SI=0000DI=0000DS=13D3ES=13D3SS=13E3CS=13E7IP=(Y0f鼢N、,UPEIPLNZ~APONC
1654渤:礁知识与拄木
本栏目责任编辑:谢媛媛软件设计开发./13E7:0000B8E313MOVAX,13E3
可以查到当前代码段段基值是13E7H,堆栈段的段基值为13E3H。整个程序段所占内存大小存放在(BX,CX)中,为005CH个字节。
输入U命令后,屏幕出现了代码段在内存中的存放情况,如下所示:
-ucs:O
13E7:0000B8E313MOVAX.13E3
13E7:O0038ED8MOVDS。AX
13E7:0005B8E513MOVAX.13E5
13E7:00088ECOMOVES.AX
13E7:000A8D360000U认SI,[oo001
13E7:000E8D3EOOooLEADI.10000]
13E7:0012B91A00MOVCX,001A
13E7:0015FCCLD一
13E7:0016F3REPz
13E7:0017A4MOVSB,
13E7:0018B44CMOVAH-4C
13E7:001ACD21INT21
13E7:001CECINALDX
13E7:001D81EC9000SUBSP.0090
可以查到数据段的段基值为13E3H。附加段段基值为13E5H,并可以找到待运行代码段的起始地址为13E7:0000,结束地址为
13E7:001C。
经过分析后可以找到数据段中的小写字母表存放的首偏移地址是0,将要存放复制过来的小写字母表的首偏移地址也是O。这
样就可以查看数据段中被复制的小写字母表在内存中存放的情况,选用D命令,如下所示:
一D13E3:0L1A
13E3:00006162636465666768—696A6B6C6D6E6F70abedefghijklmnop
13E3:00107172737475767778—797Aqrstuvwxyz
可以看出屏幕显示三栏信息.右边栏显示的是数据段在内存中存放的信息,当前是小写字母表,中间栏显示的是这些小写字母
在内存中存储的形式.均为十六进制,左边栏显示的是每一行的16个字节单元区域的首字节单元地址。
接下来选择G命令来运行程序,如下所示:
一G=13e7:0000001C
Programterminatednormally
可以看出该程序的结果并没有直观显示出来.这时我们可以分析下该程序的功能,是将数据段中的小写字母表复制到附加段
的存储区域,要想观察结果得用D命令去查看附加段所在内存单元的内容是否是小写字母表就可以了。如下所示:’-d13e5:0lla
13E5"00006162636465666768—696A6B6C6D6E6F70abedefghijklmnop
13E5:00107172737475767778—797Aqrstuvwxvz
结果已经显示在屏幕上了,可以看出附加段里有存放的小写字母表,可以判断该程序是正确的。
3结束语
“汇编语言程序设计”是--f3实践性很强的学科,要求我们在学习理论知识的同时更重视上机环节的实践操作能力的培养,尤
其要熟练地灵活使用Debug调试工具,以实验实践促进理论知识的深入理解。从而激发学生的学习兴趣,提高教学质量和教学效率,为学生的后续课程的学习打下扎实的基础。
参考文献:
【1】1沈美明.IBM——PC汇编语言程序设计【M】.北京:清华大学出版社,1991.
【2】王正智.宏汇编语言程序设计【M】.成都:电子科技大学出版社,2000.
【3】罗省贤.汇编语言程序设计教程【M】.北京:电子工业出版社,2004.
【4】杨季文.80X86汇编语言程序设计教程【M】.北京:清华大学出版社,1998.
1655
浅谈Debug调试汇编语言程序的方法
作者:计博婧, JI Bo-jing
作者单位:池州学院,安徽 池州,247100
刊名:
电脑知识与技术
英文刊名:COMPUTER KNOWLEDGE AND TECHNOLOGY
年,卷(期):2008,01(9)
被引用次数:0次
参考文献(4条)
1.沈美明IBM-PC汇编语言程序设计 1991
2.王正智宏汇编语言程序设计 2000
3.罗省贤汇编语言程序设计教程 2004
4.杨季文80X86汇编语言程序设计教程 1998
相似文献(10条)
1.期刊论文龙祖强.梁昔明.杨利容.LONG Zu-qiang.LIANG Xi-ming.YANG Li-rong汇编语言程序调试工具DEBUG浅析-衡阳师范学院学报2008,29(6)
DEBUG是汇编语言程序的重要调试工具,也是学好汇编语言的难点之一.本文探讨了DEBUG在寄存器、内存、堆栈以及指令等教学内容中的重要作用,阐述了利用DEBUG调试程序的方法,以帮助学生利用这一工具学好和用好汇编语言.
2.期刊论文顾剑汇编语言的形象教学-海南大学学报(自然科学版)1999,17(3)
汇编语言是计算机专业的一门非常重要的专业基础课,是学好后续许多专业课的关键,是其他任何高级语言都不能替代的必修课.笔者试图以可见的辅助手段--如Debug调试工具、Dos和Bios功能调用等可直接显示运行状态和结果的手段谈谈汇编语言的形象教学.
3.期刊论文邢江.Xing Jiang基于Emu8086的汇编语言程序设计探讨-中国教育技术装备2010,""(3)
简单介绍Emu8086功能,通过汇编程序实例调试,对比Emu8086和Debug在汇编语言程序设计中的应用.可以看出,Emu8086的使用使得汇编语言程序的编译、执行变得更加直观和清晰,有助于提高初学者的学习兴趣.
4.期刊论文余婷婷浅谈高职高专院校汇编语言课程教学改革-成才之路2007,""(30)
汇编语言是一种能充分发挥和利用计算机硬件特性的语言,但在高职高专院校教学中,内容滞后于硬件的发展,与实际脱节,学生缺乏学习积极性.针对这一现状,本文提出其重要性,并从教学内容、理论与实验教学方式上作了一些改革.
5.期刊论文赵学良.张雯.杜海涛.王红梅.尚宪刚8086汇编语言教学体会-中国科技信息2007,""(18)
依据多年汇编语言教学经验,提出从重点明确、知识深化、良好编程习惯养成三个方面对汇编语言教学实进行改革,并在教学实践过程中取得了良好效果.
6.期刊论文陈琍《汇编语言》教学方法初探-株洲师范高等专科学校学报2004,9(5)
介绍了如何用图示法、类比法、对比法将汇编语言中的一些重点和难点问题讲解透彻,主要包括寻址方式、堆栈操作、数据分配伪指令、循环与分支程序设计、中断调用过程等,并探讨了实践性教学环节的安排.
7.期刊论文杜宜同利用Debug命令浅析微机的工作原理-电脑知识与技术(技术论坛)2005,""(7)
本文利用Debug命令阐释了微机的部分工作原理,主要包括:CPU的算术运算与逻辑运算、CPU与内存的数据交换、显示原理、键盘的工作机理,发声原理等.
8.期刊论文李文红浅谈汇编语言的教与学-科技创新导报2008,""(1)
本文主要介绍了汇编语言这门课程的特性、学习汇编语言的方法和从教与学两个方面浅谈了学好汇编语言的方法.
9.期刊论文孙滢.许金东汇编语言教学的实践与思考-考试周刊2007,""(25)
汇编语言是计算机相关专业的重要的专业基础课,也是公认的难教难学的课程.本文从汇编语言本身的特点、学生对学习汇编语言重要性的认识以及教师的教学等三个方面分析了造成这一现象的原因,并提出了一些解决办法.
10.期刊论文朱庆.王文剑缓冲区溢出攻击的原理分析-电脑学习2003,""(6)
用汇编语言程序介绍缓冲区溢出的攻击原理,对学生学习汇编语言及了解缓冲区攻击均有帮助.
本文链接:https://www.doczj.com/doc/d111347539.html,/Periodical_dnzsyjs-itrzyksb200809032.aspx
授权使用:齐齐哈尔大学(qqhedx),授权号:fe1749ef-f427-4bf1-9acc-9e35008d1b54
下载时间:2010年11月21日