第一部分 汇编语言程序设计上机操作及程序调试的方法
第一节 在IBM-PC机上运行汇编源程序所必备的软件
为了在IBM-PC机上运行汇编源程序,机器上必须有DOS操作系统环境,DOS系统盘上必须有下列文件:
EDIT.COM 文件编辑程序 MASM.EXE 宏汇编程序
CREF 交叉引用文件处理程序 LINK.EXE 链接程序 LIB 库管理程序 DEBUG.COM 调试程序
第二节 在IBM-PC机上运行汇编源程序的步骤
当用户编制好汇编语言源程序之后,要在机器上运行,必须经过以下几个步骤:
1. 用EDIT命令建立与修改汇编源程序文件(ASM文件)
源程序就是用汇编语言的语句编写的程序,它不能被机器识别。源程序必须以ASM为附加文件名。至于EDIT的使用方法可以查阅手册。
2. 用MASM命令汇编源文件以产生相应的目标文件(OBJ文件)
源程序建立以后,必须经过汇编,转换成用二进制代码表示的目标文件,机器才可运行。汇编是通过调用PC—DOS下的宏汇编程序MASM实现的。汇编过程中,汇编程序对源文件进行二次扫描,如果源程序中有语法错误,则汇编过程结束后,汇编程序会指出源程序中的错误,这时,用户可以再用编辑程序来修改源程序中的错误,最后,得到没有语法错误的OBJ文件。
3. 用LINK命令连接目标文件以产生可执行文件(EXE文件)
由于汇编之后所得到的目标代码的存放地址并不是可执行的绝对地址,而是浮动的相对地址,因而,必须经过连接,把程序的各个模块连接在一起,或把要调用的子程序与主程序连接在一起,把相对地址变成绝对地址,形成可执行的文件。连接是由调用PC—DOS下的LINK程序来实现的。
4. 调试、运行可执行文件。
经过以上过程,在盘上有了可执行文件,则可在DOS提示符下,直接打入文件名(不用扩展名),就可以把执行文件从盘上装入内存,且立即执行此程序。
然而通常一个较复杂、较长的汇编语言源程序,希望一点错误也没有的可能性是很小的,这样就需要调用PC—DOS支持下的DEBUG程序,来调试我们的目标程序。被调试程序在DEBUG的管理下,可以单步执行程序,也可以设置断点,可以显示和修改CPU内部寄存器和标志位的内容等,这样就便于寻找程序中的错误。
1
在发现了错误以后,通常还要重复上述的编辑、汇编,连接和调试程序的全过程,直至程序运行正确为止。
已调试的目标程序,任何时候都可在PC DOS下,通过打入文件名即可运行它。上机过程流程如图2-1所示:
汇编语言程序编辑程序汇编程序连接程序调试程序Y有错吗?N运行程序图2-1 汇编语言程序上机过程流程
2
第三节 子程序库的建立方法
在处理比较复杂的问题时,往往需要把某些经常被反复调用的子程序汇编成目标模块,集合在一起组成一个“子程序库”(.LIB),以方便调用。
建立子程序库是调用DOS的库管理程序LIB来实现的。库管理程序LIB的启动方式分为提问方式、命令方式、文件方式三种,此处仅介绍提问方式。
在DOS状态,键入“LIB↙”之后,DOS把LIB装入主存并向用户提问,用户根据要求键入相应的回答。LIB的提问信息及其回答如表1所示,回答时可用的命令字符如表2所示。
提示信息 Library name: Operation: List file: 命令字符 + - * ; & CTRL_C 表2 库管理命令字符 功 能 把目标代码文件作为最后一个模块加入库中 从库中删除一个模块 从库中取出模块,写入目标文件中(库中仍保留) 剩下的提示取缺省值 提示信息在一行内回答不下时,键入此字符将另起一行 终止库管理操作 表1 LIB的提示信息及回答 回 答 欲进行操作的库名(缺省文件扩展名为.LIB) 命令字符及模块名或目标文件名 交叉参考列表文件名(缺省:NUL,无交叉参考列表文件) 下面举例说明子程序库的建立方法.
建立一子程序库WAN.LIB,将子模块QUEUE、F10T2、F2T10放入该库中,其操作步骤如下:
⑴ 建立它们的源文件QUEUE.ASM、F10T2.ASM、F2T10.ASM。
⑵ 将这三个源文件模块分别汇编,生成目标文件QUEUE.OBJ、F10T2.OBJ、F2T10.OBJ。
⑶ 调用库管理程序LIB建立子程序库WAN.LIB,并将三个目标文件加入库中,既可逐个加入,也可一次加入。如果逐个加入,可用以下方法(一):
C> LIB↙
Microsoft (R) Library Manager Version 3.04
Copyright (C) Microsoft Corp 1983,1984,1985,1986. All rights reserved. Library name: WAN↙
Library does not exist. Create? Y↙ Operations: +QUEUE↙ List file: ↙
C> LIB↙
Microsoft (R) Library Manager Version 3.04
3
Copyright (C) Microsoft Corp 1983,1984,1985,1986. All rights reserved. Library name: WAN↙
Library does not exist. Create? Y↙ Operations: +F10T2↙ List file: ↙
C> LIB↙
Microsoft (R) Library Manager Version 3.04
Copyright (C) Microsoft Corp 1983,1984,1985,1986. All rights reserved. Library name: WAN↙
Library does not exist. Create? Y↙ Operations: +F2T10↙ List file: ↙
如果一次加入,可用如下方法(二): C> LIB↙
Microsoft (R) Library Manager Version 3.04
Copyright (C) Microsoft Corp 1983,1984,1985,1986. All rights reserved. Library name: WAN↙
Library does not exist. Create? Y↙ Operations: +QUEUE+F10T2+F2T10↙ List file: ↙
库文件建立以后,库中的子程序可以方便地被其它程序调用。例如,当子程序模块QUEUE、F10T2、F2T10入子程序库WAN.LIB之后,主模块MAIN.ASM汇编后可按如下方式连接(假定主模块的目标文件为MAIN.OBJ,且主模块中调用子模块QUEUE、F10T2及F2T10):
C> LINK↙
Microsoft 8086 Object Linker
Version 2.44 (C) Copyright Microsoft Corp 1983 Object Modules [.OBJ]: MAIN↙ Run File [MAIN.EXE]: ↙ List File [NUL.MAP]: ↙ Libraries [.LIB]: WAN↙ 连接后得到可执行文件MAIN.EXE。
4