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所示。
搜索“diyifanwen.net”或“第一范文网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,第一范文网,提供最新教学研究汇编语言程序上机调试 全文阅读和word下载服务。
相关推荐: