汇编语言程序上机调试
更新时间:2023-09-13 09:59:01 阅读量: 教学研究 文档下载
2.1 汇编语言程序上机调试
汇编语言的学习离不开上机实验。汇编语言程序上机操作包括四个步骤:编辑、汇编、连接、调试运行4个过程,如图 错误!文档中没有指定样式的文字。-1所示。
文本编辑器,如 EDIT 编辑源程序:文件名.asm 汇编程序,如 MASM.EXE 目标模块:文件名.obj 连接程序,如 LINK.EXE 可执行文件:文件名.exe 调试程序,如 DEBUG.EXE 调试应用程序 图 错误!文档中没有指定样式的文字。-1 汇编语言程序上机调试过程
常用的汇编器有MASM(Marco Assembler,宏汇编)和TASM(Turbo Assembler),连接器有LINK和TLINK,调试器有DEBUG和TD(Turbo Debugger)。MASM、LINK和DEBUG由Microsoft 公司出品, TASM、 TLINK和TD由Borland公司出品。本书以Microsoft公司的汇编工具包为例,介绍汇编语言程序的上机调试过程。
注:在学习本节内容时,将重点放在程序调试过程和方法上,暂时不需要去探求实例的程序代码及各条指令的含义。相关内容在后续章节会详细介绍。
错误 汇编 错误 连接 错误 错误 2.1.1 简单汇编语言源程序
下面先看一个完整的简单汇编语言源程序。 【例 错误!文档中没有指定样式的文字。-1】 在屏幕上显示字符串“Hello,Assembly!”。
;源程序:ex201.asm
;功能:在屏幕上显示字符串“Hello,Assembly!” DSEG SEGMENT ;数据段开始
STRING DB 0DH,0AH,'Hello,Assembly!',0DH,0AH,'$' DSEG ENDS ;数据段结束 CSEG SEGMENT ; 代码段开始
ASSUME CS:CSEG,DS:DSEG ;设定段寄存器与逻辑段的关系
MOV DS,AX ; 设置数据段段地址
MOV DX,OFFSET STRING ;为DOS功能调用设置入口参数 MOV AH,9 ;为DOS功能调用设置功能号 INT 21H ;DOS功能调用,显示字符串
MOV AX,4C00H ;为DOS功能调用设置功能号和入口参数
START: MOV AX,DSEG
INT 21H ;DOS功能调用,返回DOS操作系统
CSEG ENDS ; 代码段结束 END START ; 汇编结束
8086/8088系统中,汇编语言以逻辑段为基础,按段的概念来组织代码和数据。通常,数据变量定义在数据段中,程序写在代码段内。逻辑段定义利用SEGMENT和ENDS一对伪指令定义,伪指令不会产生机器代码。段开始语句SEGMENT中的段名与段结束语句ENDS中的段名要相同,从而保持配对,分别用来指示一个逻辑段的开始和结束。段名由程序员命名。例 错误!文档中没有指定样式的文字。-1中定义了两个逻辑段,段名分别为DSEG和CSEG。
第5行的ASSUME伪指令语句告诉汇编程序,从现在开始CS寄存器对应CSEG段,DS寄存器对应DSEG段。即DSEG用作数据段,CSEG用作代码段。所以程序代码放在CSEG段中。
最后一行END START伪指令,告诉汇编程序将源程序汇编生成目标代码到此结束。即汇编结束点。END为保留字,START与第6行中起始点标号一致,确定START标号为入口地址。在END伪指令之后的代码不会被汇编成目标代码。标号也是由程序员自行命名。
下面我们结合例 错误!文档中没有指定样式的文字。-1介绍汇编语言程序上机调试过程。
2.1.2 编辑
编辑阶段的任务是:输入汇编语言源程序;对源程序进行修改。 任意文本编辑软件都可以用来输入和修改汇编语言源程序,如命令行方式下的全屏幕文本编辑器EDIT,其他高级语言程序开发工具中的编辑环境,Windows下的记事本(Notepad)、写字板(Writer)、Word等。要注意,一定要用纯文本格式来保存汇编源程序文件,否则无法汇编。汇编语言源程序文件一般应以.ASM为扩展名,这样可以简化后续上机步骤中的操作命令。
选择“开始-程序-附件-命令提示符”,点击启动DOS命令窗口。在该窗口中,可通过同时按下Alt+Enter快捷键,使该窗口在全屏和窗口之间切换,以方便操作。在命令行方式下,具体操作如图 错误!文档中没有指定样式的文字。-2所示。命令输入后回车生效。
切换到D盘 cd命令切换到汇编程序masm所在的文件夹 打开edit编辑器,输入例2.1程序代码
图 错误!文档中没有指定样式的文字。-2 切换到masm文件夹
也可以使用记事本等文本编辑环境完成源代码的录入,正确输入例 错误!文档中没有指定样式的文字。-1程序代码,保存源程序文件ex201.asm。可以进入下一个汇编环节。
2.1.3 汇编
汇编阶段的任务是将源程序翻译成由机器代码组成的目标模块文件(.OBJ)。 如果源程序中没有语法错误,MASM将自动生成一个目标模块文件(ex201.obj);否则MASM将给出相应的错误信息。这时应根据错误信息,重新编辑修改源程序后,再进行汇编。
汇编ex201.asm源程序具体操作:输入masm ex201.asm↙,如图 错误!文档中没有指定样式的文字。-3所示。
汇编命令
目标文件 键入3次回车可生成目标 列表文件 文件,需要列表文件或交 交叉文件 叉文件需给出文件名。 必须显示0个警告错误和0个语法错误
图 错误!文档中没有指定样式的文字。-3 汇编ex201.asm文件界面
如果利用分号“;”结尾命令(如:masm ex201.asm;),则汇编程序不再提示输入模块文件名、列表文件名等,直接采用默认的文件名。默认采用源程序文件相同的主文件名,扩展名则是相应类型文件的扩展名,例如目标模块文件(.obj)和列表文件(.lst)等。
2.1.4 连接
连接阶段将一个或多个目标文件和库文件连接成一个完整的可执行程序(.EXE、.COM文件)。
将ex201.obj目标模块文件连接成可执行文件具体操作:输入link ex201.obj↙,如图 错误!文档中没有指定样式的文字。-4所示。
链接命令
键入3次回车生成可执行文件。如果要将目标文件和其它库文件一起连接成可执行文件,则必须输入库文件的文件名。 警告“无堆栈” 但是不影响运行
图 错误!文档中没有指定样式的文字。-4 连接ex201.obj文件界面
如果没有错误,LINK将生成一个可执行文件(ex201.exe);否则将提示相应的错误信息。这时需要根据错误信息重新修改源程序文件后再汇编、链接,直到生成可执行文件。
2.1.5 运行和调试
经汇编、连接生成的可执行程序只要输入文件名,回车即可运行,如图 错误!文档中没有指定样式的文字。-5所示。
运行程序 运行效果
图 错误!文档中没有指定样式的文字。-5 运行ex201文件界面
操作系统装载该文件进入主存,并开始运行,例 错误!文档中没有指定样式的文字。-1运行效果如图 错误!文档中没有指定样式的文字。-5所示。如果出现运行错误,可以从源程序开始排错,也可以利用调试程序帮助发现错误。
观测汇编语言程序的执行结果有以下两种不同的方法,适用于不同的汇编语言程序。 ①直接在DOS命令下输入该汇编程序的可执行文件名观察执行结果,比如例 错误!文档中没有指定样式的文字。-1汇编程序。该方法适用于运行结果直接在屏幕上显示的汇编语言程序。
② 使用DEBUG命令观察程序结果,这种方法适用于汇编程序执行后,必须深入观察机器的各个寄存器内容或内存单元内容的情况。
DEBUG的主要命令列于表 错误!文档中没有指定样式的文字。-1。注意各常用调试命令的使用。
表 错误!文档中没有指定样式的文字。-1 DEBUG主要命令
命令格式 A [地址] C [范围] 地址 D [范围] E 地址 [字节值表] F 范围 字节值表 G [=起始地址] [断点地址表] H数值 数值 I 端口地址 L [地址[驱动器号扇区号扇区数]] M 范围 地址 功能说明 汇编 内存区域比较 显示内存单元内容 修改内存单元内容 填充内存区域 断点执行 十六进制数加减 从端口输入 从磁盘读 内存区域传送 N 文件标识符[文件标识符...] O 端口 字节值 P [=地址] [数值] Q R [寄存器名] S 范围 字节值表 T [=地址] [数值] U [范围] W[地址[驱动器号扇区号 扇区数]] 指定文件 向端口输出 执行过程 退出DEBUG 显示和修改寄存器内容 在内存区域搜索 跟踪执行 反汇编 向磁盘写 ? DEBUG命令使用说明 ① DEBUG接受和显示的数都用16进制表示,且不需要给出后缀字母H。 ② 命令都是一个字母,命令参数随命令而异。 ③ 命令和参数不区分大小写。
④ 分隔符(空格、制表符、逗号等)只是在两个相邻接的16进制数之间是必需的,命令和参数间可以不用分隔符。
⑤ 在提示符出现时,可键入DEBUG命令,只有在按回车键后,命令才开始执行。 ⑥ 若DEBUG检查出一个命令的语法错误, 则用“^ Error”指出错误的位置。
⑦ 可以用Ctrl+Break键或Ctrl+C键来打断一个命令的执行, 返回DEBUG提示符。 ⑧ 若一个命令产生相当多的输出行时, 为了能看清屏幕上的显示内容, 可按Ctrl+S键, 暂停显示。
? DEBUG命令参数的说明
除了退出命令Q外, 其它DEBUG命令都可带有参数。
① 地址,地址参数通常表示一个内存区域(或缓冲区)的开始地址, 它由段地址和偏移地址两部分组成。段地址可用一个段寄存器表示, 也可用4位16进制数表示。偏移地址用4位16进制数表示。段地址和偏移地址间必须有冒号作为分隔。段地址部分是可省的,在段地址缺省的情况下,除了A、 G、L、 T、 U和W命令隐含使用CS寄存器之值外,其他命令隐含使用DS寄存器之值。
② 范围,范围用于指定内存区域(缓冲区),由两种表示方式:第一种是用起始地址和结束地址表示,结束地址不能具有段地址。第二种是用起始地址和长度表示。长度必须以字母L引导。范围最大是64K, 即0至0FFFFH。例如:
CS∶100 110 CS∶100 L10
下面采用DEBUG.EXE调试程序观察例 错误!文档中没有指定样式的文字。-1程序执行情况。具体操作步骤如下。
1. 进入DEBUG状态
当例 错误!文档中没有指定样式的文字。-1程序汇编、连接成功,即生成可执行文件ex201.exe,输入“DEBUG ex201.exe↙”,装载ex201.exe,进入DEBUG状态。注意,一定要加文件后缀(.exe),否则会报错。如图 错误!文档中没有指定样式的文字。-6所示。 2. 反汇编U命令
利用反汇编命令U可把内存单元的内容作为机器指令, 用助记符的形式显示出来。使用反汇编U命令查看程序ex201.exe装载后的反汇编,并判断程序的结束地址。如图 错误!文档中没有指定样式的文字。-6所示。
debug命令,进入调试模式 反汇编U命令 程序的结束指令以及地址,因 为下面的汇编指令不属于本程序 程序 程序 机器码的段 的偏移 首址量 汇编指令
图 错误!文档中没有指定样式的文字。-6 DEBUG的U命令
不带参数的U命令,从当前CS∶IP所指处开始,或者紧接着上次反汇编结束地址处开
始反汇编, 长度为32字节,显示在屏幕上。U命令的显示分为3部分:程序所占的存储地址、机器码及汇编指令。带参数的U命令可以从参数指定的地址处反汇编。
3. R命令
经过上一步反汇编明确了程序在内存中的位置和结束指令位置后,可以开始准备执行,但在执行之前,我们有必要查看一下原来寄存器和内存相关单元内容,从而可以在执行后对比相关单元内容是否正确装载或改变。
利用R命令可显示8086/8088各寄存器的内容和下一条将要执行的指令,如图 错误!文档中没有指定样式的文字。-7所示。各段寄存器的内容与存储器的实际使用情形有关。
DEBUG采用显示标志状态符号的方法反映标志值,每一个标志的状态分别用两个字母表示,表示8个标志状态的符号列于表 错误!文档中没有指定样式的文字。-2。
R命令查看各寄存器内容 即将执行的下一条指令内存地址、机器码及汇编指令 各标志状态 跟踪执行命令T DS寄存器已正确设置
图 错误!文档中没有指定样式的文字。-7 DEBUG的R、T命令
表 错误!文档中没有指定样式的文字。-2 DEBUG中标志状态的符号表示
标志名称 溢出 OF 方向 DF 中断 IF 符号 SF 零 ZF 辅助进位 AF 奇偶 PF 进位 CF 置位状态 复位状态 OV NV DN UP EI DI NG PL ZR NZ AC NA PE PO CY NC R命令不仅能显示各寄存器内容, 还可修改各通用寄存器和段寄存器内容, 还包括指令指针IP和标志寄存器。
4. 跟踪执行命令T 查看完寄存器值情况后,我们首先执行两条T命令,正确设置好DS寄存器值。如图 错误!文档中没有指定样式的文字。-7所示,两条T命令分别完成以下两条指令的跟踪执行。
MOV AX,DSEG
MOV DS,AX ; 设置数据段段地址
可以看到汇编后的指令,直接用数据段地址147EH代替DSEG。MOV指令为数据传送指令,是程序中使用最多的一条指令。其汇编指令格式为:
MOV dst,src ;dst←(src),将源操作数src传送至目的操作数dest。
因此,前两条指令执行完后,我们可以看到(DS) = (AX) = 147EH,正确完成了数据段段地址的设置。
利用跟踪执行命令T可跟踪执行一条或多条指令。T命令可指定起始执行地址,地址参数以等号引导,如地址参数中无段地址,那么就以CS为段地址。必须注意, 起始地址处必须是可执行指令。如果无起始地址, 那么跟踪执行从CS∶IP所指处开始。如果不指定跟踪执行指令的条数,那么就跟踪执行一条指令。T命令会跟踪进入DOS功能调用程序。请注意, 一般情况下不要进入DOS功能调用程序和BIOS程序。
5. 显示内存单元命令D
正确设置好DS寄存器值后,我们先来查看一下数据段的初始内容,即定义的变量的存储分配情况。利用命令D查看数据段的内容(段地址须根据实际装入的地址而定,在上一步操作中已正确装入),如图 错误!文档中没有指定样式的文字。-8所示,显示内容左边是内存单元的逻辑地址栏,中间部分是字节值(16进制),右边是把字节值作为ASCII 码所对应的符号, 对于非ASCII 码,或者非显示符号,用点或者空格表示。从图中我们可以看到例 错误!文档中没有指定样式的文字。-1定义的字符串在内存中的存储情况。
如果之前没有执行T命令装载好DS值,则D命令所跟参数段地址应直接给出4位16进制数值,不能用DS给段地址。
显示内存单元D命令
执行命令G命令
图 错误!文档中没有指定样式的文字。-8 DEBUG的D、G命令
6. 执行命令G
观察完数据段情况后,下面我们用断点执行命令G连续运行多条指令。如图 错误!文
档中没有指定样式的文字。-8所示,这一步我们指定断点为偏移地址000AH的指令“INT 21H”(指令在内存中的存储位置我们在调试模式第2步U命令查看得到,参见图 错误!文档中没有指定样式的文字。-6),G命令控制从当前CS∶IP处开始执行指令, 直到断点位置000AH暂停。当然,你也可以指定其它断点位置。
利用执行命令G可以设置断点执行被调试程序。没有指定开始地址的G命令从当前CS∶IP处开始执行,直到遇断点或程序正常终止而结束。
7. 执行过程命令P
下面我们即将要执行的指令是偏移地址000AH单元的指令“INT 21H”。注意,此时最好不要用T命令,可以用P命令。
执行P命令
执行P命令
图 错误!文档中没有指定样式的文字。-9 DEBUG的P命令
如图 错误!文档中没有指定样式的文字。-9所示,首先用P命令执行指令“INT 21H”,此时,例 错误!文档中没有指定样式的文字。-1源程序只剩最后两条指令没有执行了。最后,依次执行T命令和P命令,将程序执行结束。请注意第一个P命令在执行DOS功能调用后所显示的信息“Hello,Assembly!”。第二个P命令调用DOS的4CH号功能,终止程序执行, 所以DEBUG显示提示信息“Program terminated normally”而报告被调试程序执行完。
利用执行过程命令P可步进执行一条或多条指令。P命令与T命令类似,但不会由于子程序调用或软中断调用而跟踪进入被调用程序。P命令是步进跟踪, 所以也能一次执行完LOOP指令, 或者一次执行完重复的串操作指令。
因此,本例中执行中断指令INT时用P命令,没有用T命令,一般情况下不要进入DOS功能调用程序和BIOS程序。
8. 退出DEBUG 为了退出DEBUG, 只需在DEBUG提示符下输入退出命令Q即可。在发出Q命令后, DEBUG终止,控制将转回到DOS命令行。请注意,Q命令不保存正在被调试的文件,为保存被调试的内容必须使用其他的DEBUG命令。
至此,例 错误!文档中没有指定样式的文字。-1调试过程结束。建议读者在后续的学习中多使用DEBUG辅助学习汇编指令及汇编程序设计,熟练掌握表 错误!文档中没有指定样式的文字。-1所列的一些常用DEBUG调试命令,这将会使学习汇编语言有更直观的体验和更深刻的理解。
正在阅读:
汇编语言程序上机调试09-13
中考家长应关注孩子的心理疲劳03-30
演讲稿:课改伴我成长02-29
精细化管理在公路建设项目施工中的应用01-29
中小企业内部控制+开题报告05-14
基层工会在构建和谐劳动关系发挥作用中存在的问题及解决办法04-11
单向板肋梁楼盖设计04-14
三掘队安全管理红线(第三版)11-24
小波分析理论及实际应用举例04-12
高考新材料作文论证的层次性03-08
- 公务员上岸同学告诉你,怎样走出面试中常见的十大误区
- 作表率,我们怎么办(办公室主任)
- 乘务员安全责任书
- 增员面试流程
- 河南省焦作市规模以上租赁和商务服务业企业应付职工薪酬数据洞察报告2019版
- 最新4社区工作者面试题
- 个人简历表
- 男教工体检必检项目
- 河南省兰考县规模以上租赁和商务服务业企业应付职工薪酬数据洞察报告2019版
- 兼职译员测试稿
- 河南省开封市规模以上租赁和商务服务业企业应付职工薪酬数据洞察报告2019版
- 永州职业技术学院校园总体规划-永州职业学院
- 最新5、培训科长笔试题(答案)
- 2019雅商酒店境外人员登记培训稀有资料,不可错过
- 小学教师求职简历范文
- 红酒知识与礼仪
- 春节给领导拜年的短信拜年词
- 2019年上半年中小学教师资格证结构化面试真题1
- 20XX年县干部培训工作目标
- 硬笔试听课
- 语言程序
- 上机
- 汇编
- 调试
- 广告创意在广告策划中的地位和作用
- 从刷子李到俗世奇人
- 思想政治理论课社会实践调查报告
- 《机电传动控制课程设计》题目2 - 图文
- 江苏省电力公司低压接户线、进户线工程技术规范
- 名著阅读与写作对接举例
- 《体育舞蹈》理论考试选择题部分 - 图文
- 管理沟通论文
- 浅谈官兵情感情绪以及压力释放
- 2014-2015(二)光纤通信期末考试A卷
- 消防水泵房管理制度
- 铅污染现状分析及对策研究
- (试卷合集)浙江省2018年八年级语文上学期期末试卷29套合集含答案
- 《晏子谏景公》阅读答案(附翻译)
- 施工技术简答题以及答案
- 泄漏电流测试仪 - 图文
- 管理心理学 学习笔记
- 氯离子对FGD系统影响
- 《热工基础与流体力学》课程复习题
- 怎样引导学生树立正确的价值观