《汇编语言程序设计》上机实验指导书
汇编语言上机实验指导书
一、概述
上机实验总学时为16学时,其中综合性实验为2学时。实验共有6项暂定为8次,每次2学时。 1.实验辅导的主要内容
实验辅导的内容包括每个实验的实验目的;实验内容;对实验的算法及实验方法的必要说明;实验准备;实验步骤;实验报告要求;实验程序及参考框图。开始的实验介绍较细,后面的实验简要介绍。
2.实验的软硬件要求
关于汇编语言程序设计的硬件要求不高,有IBM-PC/XT即可,但应有彩色显示器以便进行图形实验。软件方面应有MASM.EXE5.0版(包括LINK.EXE),与MS-DOS版本配套的DEBUG程序和EDIT.EXE编辑软件(其它编辑软件也可以)。 3.加强实践能力的培养
实验目的不光是为了验证书本理论,更重要的是对实践能力的培养。其中包括:
实际调试程序的能力,例如修改程序参数的能力,查看结果的能力,设置断点调试运行的能力等; 开发汇编语言应用程序的能力,例如应用有关汇编软件的能力,进行系统调用和BIOS功能调用的能力,进行模块程序设计的能力等。
对某一问题用不同的程序实现的能力,例如我们为每个实验提供了参考程序(或程序段),目的是让每个实验者参照样板程序将实验成功地实现,在掌握其方法后,自己改变程序或自己编制程序加以实现。
实验一 汇编语言运行环境及方法、简单程序设计(2学时、验证性)
1.实验目的:
(1) 熟悉汇编语言运行环境和方法 (2)了解如何使用汇编语言编制程序 (3) 熟悉DEBUG有关命令的使用方法 (4) 利用DEBUG掌握有关指令的功能 (5) 利用DEBUG运行简单的程序段 2.实验内容
(1)学会输入、编辑汇编语言程序
(2)学会对汇编语言程序进行汇编、连接和运行 (3)进入和退出DEBUG程序
(4)学会DEBUG中的D命令、E命令、R命令、T命令、A命令、G命令等的使用。对于U命令、
- 1 -
《汇编语言程序设计》上机实验指导书
N命令、W命令等,也应试一下。 3.实验准备
(1)仔细阅读有关汇编语言环境的内容,事先准备好使用的例子。
(2)准备好源程序清单、设计好调试步骤、测试方法、对运行结果的分析。
(3) 编写一个程序:比较2个字符串所含的字符是否相同。若相同则显示’Match.’,否则显示’No match!’;(1)仔细阅读有关DEBUG命令的内容,对有关命令,都要事先准备好使用的例子。 4.实验步骤
(1)在DOS提示符下,进入MASM目录。
(2)在MASM目录下启动EDIT编辑程序,输入源程序,并对其进行汇编、连接和运行。 ①调用edit输入、编辑源程序并保存在指定的目录中;例:edit abc.asm ②用汇编程序masm对源程序汇编产生目标文件obj。例:masm abc 不断修改错误,直至汇编通过为止。
③用连接程序link产生执行文件exe.例:link abc ④执行程序
可直接从DOS执行程序,即在DOS环境中,输入文件名即可。 (3)详细记录每一步所用的命令,以及查看结果的方法和具体结果。 5.实验报告要求
(1) 程序流程图和源程序清单。 (2) 如何启动和退出EDIT程序。 (3) 如何对源程序进行汇编及编辑。 (4)如何启动和退出DEBUG程序。
(5)整理每个DEBUG命令使用的方法,实际示例及执行结果。 (6)启动DEBUG后,要装入某一个.EXE文件,应通过什么方法实现?
实验二 循环程序、分支程序程序设计实验(4学时、验证性)
1.实验目的:
(1)掌握循环、分支程序的设计方法
(2)进一步熟悉利用DEBUG程序修改参数的方法,并检查和验证结果的正确性。 (3)学会针对不同的问题,选用不同的组织循环的方法。 2.实验内容
(1)编写一个程序,将内存中一组有符号的字数组按递增的序列排序,并将其中的二进制数以十六进制的形式显示在屏幕上。
(2)编写一个程序,判别键盘上输入的字符;若是1-9字符,则显示之;若为A-Z或a-z字符,均显
- 2 -
《汇编语言程序设计》上机实验指导书
示“c”;若是回车字符
(1)编写实验内容要求的两个程序。
(2)写出调试以上程序,即修改程序参数,检查结果的操作方法。 (3)熟悉源程序汇编、连接命令的使用方法即要回答的内容。 4.实验步骤
(1)用EDIT或其它编辑软件,编写.ASM源程序,例如HEXASC.ASM及DSPKEY.ASM。 (2)对其进行汇编及连接,产生.EXE文件。 (3)对.EXE文件进行调试运行。
a.用DEBUG调试运行,学会修改AL内容的方法。 b.对DSPKEY.EXE键入不同的字符,分别进行调试。 c.在MS-DOS下运行这两个.EXE文件。 5.实验报告要求
(1)画出两个程序的流程图,若要独立编写程序,应列出相应的程序清单。 (2)说明本实验是如何利用DEBUG进行调试的。 6.参考程序清单
(1)显示AL中两位十六进制数程序: ;DISPHEX.ASM
CODE SEGMENT
ASSUME CS:CODE START: MOV AL,3EH PUSH AX MOV DL,AL MOV CL,4 SHR DL,CL CMP DL,9 JBE NEXT1 ADD DL,7 NEXT1: ADD DL,30H MOV AH,2 INT 21H
POP AX ;显示高位ASCII码
- 3 -
《汇编语言程序设计》上机实验指导书
MOV DL,AL AND DL,0FH CMP DL,9 JBE NEXT2 ADD DL,7 NEXT2: ADD DL,30H MOV AH,2
INT 21H ;显示低位ASCII码 MOV AH,4CH INT 21H
CODE ENDS END START (2)显示键入字符程序 ;DISPKEY.ASM
CODE SEGMENT
ASSUME CS:CODE START: MOV AH,1
INT 21H CMP AL,0DH JZ DONE CMP AL,'0' JB NEXT CMP AL,'9' JA CHARUP MOV DL,AL MOV AH,2 INT 21H JMP START CHARUP: CMP AL,41H JB NEXT CMP AL,5AH JA CHRDN DISPC: MOV DL,'c'
;返回DOS ;等待键入字符,送AL ;是否是回车符? ;是则转DONE退出程序- 4 -
《汇编语言程序设计》上机实验指导书
MOV AH,2 INT 21H NEXT: JMP START CHRDN: CMP AL,61H JB NEXT CMP AL,7AH JA NEXT JMP DISPC DONE: MOV AH,4CH INT 21H CODE ENDS
END START
实验三 子程序设计(4学时、验证性)
一、本实验的目的在于让同学们掌握同一模块调用的方法。 1.实验目的
(1)掌握主程序与子程序之间的调用关系及调用方法。 (2)掌握子程序调用过程中近程调用与远程调用的区别。 (3)掌握通过堆栈转送参数的方法。 2.实验内容
(1)将BUF开始的10个单元中的二进制数转换成两位十六进制数的ASCII码,在屏幕上显示出来。要求码型转换通过子程序HEXAC实现,在转换过程中,通过子程序DISP实现显示.
(2)编写一个主程序,从键盘接收若干个字符,然后用远调用的方法,调用子程序统计字符串中字符’b’的个数.子程序的参数是字符串的首地址TABLE,字符串长度N及字符”b”.子程序返回字符"b”的个数.参数传送采用堆栈实现.主程序在子程序返回后,显示字符”b”及其个数(设为一位十六进制数)。 3.实验说明
(1)第一个实验程序用子程序的近程调用实现。由于在调用HEXASC子程序时,子程序又调用了DISP子程序,这叫子程序的嵌套调用。实验过程中可以从堆栈的内容看到两个子程序的返回地址值。由于是近调用,地址值只包括返回地址的段内偏移量。在每个子程序的执行中,检查CS值是不变的。 (2)第二个程序是利用远调用的方法调用子程序的。在远调用情况下,主程序与子程序处在不同的逻辑代码段中,可在子程序执行中查看CS值,它与主程序中的CS值是不同的。子程序调用后,堆栈中保留了返回地址的段地址及段内偏移量。
(3)第二个程序中,主程序与子程序之间参数的传送是由堆栈实现的。一段是将参数(此处是串首址
- 5 -