简化《汇编语言程序设计》实验指导书定稿.docx
- 文档编号:26893204
- 上传时间:2023-06-23
- 格式:DOCX
- 页数:30
- 大小:1.03MB
简化《汇编语言程序设计》实验指导书定稿.docx
《简化《汇编语言程序设计》实验指导书定稿.docx》由会员分享,可在线阅读,更多相关《简化《汇编语言程序设计》实验指导书定稿.docx(30页珍藏版)》请在冰豆网上搜索。
简化《汇编语言程序设计》实验指导书定稿
《汇编语言程序设计》
实验指导书
(第一版)
邵桂芳黄贤英刘政肖朝晖编
重庆工学院计算机学院
2006年10月
目录
有关汇编语言3
实验一汇编语言上机操作过程(验证性实验)4
实验二DEBUG的使用(验证性实验)12
实验三基本运算程序设计(设计性实验)22
实验四顺序程序设计(设计性实验)28
实验五字符处理程序设计(设计性实验)32
实验六分支程序设计(设计性实验)35
实验七循环程序设计(设计性实验)40
实验八子程序设计(设计性实验)45
实验九中断程序设计(设计性实验)58
实验十磁盘文件管理(设计性实验)66
实验十一输入输出程序设计(综合性实验)70
实验十二图形显示程序设计(综合性实验)77
附录1实验报告编写方法96
附录2汇编语言基本指令98
2.1数据传送类指令98
2.2算术运算类指令100
2.3逻辑操作类指令103
2.4串操作类指令105
2.5控制转移类指令107
2.6处理机控制类指令110
附录3测试题111
3.1测试题一111
3.2测试题二115
3.3测试题三119
3.4测试题四124
3.5参考答案127
使用范围:
全院电子信息类、管理类等本、专科采用
使用说明:
任课教师根据教学进程,可以选择实验内容,实验九以后的内容,可以作为课程设计内容。
每个实验都安排了预备知识,是帮助学生做好实验准备的,请任课教师在实验课前,安排学生预习该内容,以提高实验效果。
有关汇编语言
1.什么是汇编语言
汇编语言是一种符号化的机器语言,即用助记符号代替机器语言的二进制代码。
简单地说,汇编语言就是机器语言的一种可以被人读懂的形式,只不过它更容易记忆。
汇编语言是除了机器语言之外最接近计算机硬件的编程语言,因此,它可以最大限度地发挥计算机硬件的性能。
用汇编语言编写的程序的速度通常要比高级语言和C/C++快很多--几倍,几十倍,甚至成百上千倍。
当然,解释语言,如解释型LISP,没有采用JIT技术的Java虚机中运行的Java等等,其程序速度更无法与汇编语言程序同日而语。
2.学习汇编的好处
通过学习汇编语言,可以了解到如何有效地设计数据结构,让计算机处理得更快,并使用更少的存储空间;同时,学习汇编语言可以让你熟悉计算机内部运行机制,并且有效地提高调试能力。
因为“结构化”是以牺牲运行效率来提高可读性与可调试性,这对于完成一般软件工程的编码阶段是非常必要的。
然而,在一些地方,比如,硬件驱动程序、操作系统底层,或者程序中经常需要执行的代码,结构化程序设计的这些优点有时就会被它的低效率所抹煞。
3.汇编语言的特点
(1)汇编语言与处理器密切相关;
(2)汇编语言程序效率高;
(3)编写汇编语言源程序比编写高级语言源程序烦琐;
(4)调试汇编语言程序比调试高级语言程序困难。
4.汇编语言的应用
(1)程序执行占用较短的时间,或者占用较小存储容量的场合;
(2)程序与计算机硬件密切相关,程序直接控制硬件的场合;
(3)需提高大型软件性能的场合;
(4)没有合适的高级语言的场合。
实验一汇编语言上机操作过程(验证性实验)
一、实验要求和目的
1.了解汇编语言程序设计的编程环境;
2.熟悉Windows下汇编语言程序设计的操作流程;
3.掌握编辑、汇编、连接等应用程序的使用方法。
二、环境和设备
1.硬件环境:
微机CPU486以上,500MB以上硬盘,32M以上内存;
2.软件环境:
装有MASM5.0、DEBUG、LINK和EDIT等应用程序。
三、实验学时
2学时
四、预备知识
1.汇编语言上机操作流程
汇编语言上机操作过程如图1-1所示,包括建立源程序、汇编成目标文件、连接成可执行文件、执行程序、调试程序等。
图1-1汇编语言上机操作流程
基于Windows的汇编语言上机操作步骤如下:
(1)安装MASM5.0、DEBUG、LINK和EDIT等应用程序
方法为先在某个盘符下建立名为masm5的文件夹,然后下载这几个应用程序到该文件夹。
如图1-2所示,在E盘下建立名为masm5的文件夹,该文件夹下有包括masm等在内的6个应用程序。
图1-2安装应用程序
(2)打开命令提示符窗口
方法为:
选择“开始—程序—附件—命令提示符”。
(3)进入包含汇编语言应用程序的文件夹
方法为:
在命令提示符窗口输入相应盘符,加冒号,然后回车,则进入相应盘符,如输入“E:
”。
然后,利用CD命令进入某个文件夹,如输入“CDMASM5”,则可以进入masm5文件夹。
如图1-3所示。
图1-3DOS命令使用
(4)利用EDIT编辑源程序
方法为:
在命令提示符窗口的相应文件夹下,输入EDIT*.ASM,进入EDIT编辑界面,输入源程序,然后保存,退出EDIT。
如图1-4所示。
图1-4EDIT编辑源程序
(5)利用MASM进行汇编
方法为:
在命令提示符窗口的相应文件夹下,输入MASM*.ASM,回车,然后按提示进行回车确认即可,汇编结束后,显示错误提示信息,没有错误则进入(6),有错误则回到(4)进行修改。
(6)利用LINK进行连接
方法为:
在命令提示符窗口的相应文件夹下,输入LINK*.OBJ,回车,确认即可。
(7)运行程序
方法为:
在命令提示符窗口的相应文件夹下,输入文件名,回车即可。
(8)利用DEBUG调试程序
方法为:
在命令提示符窗口的相应文件夹下,输入DEBUG*.EXE,进入DEBUG调试窗口。
2.EDIT应用程序的使用
(1)进入EDIT
方法为:
在命令提示符窗口的当前目录下(即包含汇编应用程序的文件夹下,如E:
\MASM5>),输入“EDIT*.ASM”,则进入EDIT编辑界面。
如果*.ASM已经存在,则在屏幕上显示该源程序内容,如果是新建文件,则打开空的编辑界面。
如图1-5所示。
(2)文本输入
在EDIT编辑界面中,可以通过键盘一行行的输入语句,也可以在任意位置输入相关信息。
(3)文本修改
先利用上下左右键(“↑↓←→”)将光标移动到要修改的位置,然后利用删除键或回格键删除单个字符。
如果想删除整行文本,可将光标移动到该行任意位置,然后按住“SHIFT+↓”就可以选中该行。
如果想选中多行,则一直按住SHIFT键,不断按↓键就可以。
图1-5EDIT编辑界面
(4)保存源程序
如果源程序编辑完毕,则可利用“ALT+F”选中文件菜单,然后利用“↑、↓”键选择Save或SaveAs保存源程序。
(5)退出EDIT
利用“ALT+F”选中文件菜单,然后利用↑键即可选中Eixt退出,回车确认即可。
3.MASM应用程序的使用
利用EDIT编好源程序后,保存并退出EDIT,返回到命令提示符窗口,此时可以利用汇编程序MASM来完成程序的编译。
由于计算机只能识别0、1二进制数据,而汇编语言源程序是由助记符表示的指令序列,计算机不能直接识别,故需要进行编译,将其转换为机器程序。
MASM就是用来把汇编源程序转换为机器语言程序的工具。
(1)汇编操作
在命令提示符窗口的相应目录下,输入“MASM*.ASM”,则显示MASM版本信息,然后依次出现提示,请求用户回答。
如图1-6所示。
图1-6MASM的使用
(2)目标文件的确认
在版本信息下,有“Objectfilename[*.OBJ]:
”提示信息,其中“*”自动采用源程序名称,该信息提示用户是否确认目标文件的名字,如果采用这个名称则按回车键,不采用则重新输入新名字。
(3)列表文件的确认
在确认了目标文件名后,则显示“Sourcelisting[NUL.LST]:
”信息,该信息表示不建立列表文件,如果用户不想建立列表文件,则回车确认;如果想建立列表文件,则输入列表文件名(一般与源程序同名),回车。
列表文件包含了源程序及其注释、地址和目标码等,是ASCII码表示的文本块,可用TYPE命令显示。
列表文件内容如图1-7所示。
(4)交叉索引文件的确认
在确认了列表文件后,则显示“Cross-reference[NUL.CRF]:
”信息,该信息表示不建立交叉索引文件,如果用户不想建立交叉索引文件,则回车确认;否则,输入文件名,回车。
交叉索引文件是用来解释源程序中每个符号是在哪定义的,哪些指令用了这个符号等信息的。
(5)错误提示
在确认了
(2)、(3)和(4)的信息后,如果源程序有语法错误,会给出错误提示信息,错误提示信息是以行为单位给出的,如图1-6所示,给出了第4-14行的错误提示,此时需要返回EDIT进行源程序修改。
图1-7列表文件内容
4.LINK应用程序的使用
在对源程序的语法错误进行修改后,利用MASM汇编源程序没有错误时,则需要利用LINK进行连接。
(1)连接操作
在命令提示符窗口的相应目录下,输入“LINK*.OBJ”,则显示LINK版本信息,然后依次出现提示,请求用户回答。
如图1-8所示。
(2)可执行文件的确认
在版本信息下,有“RunFile[*.EXE]:
”提示信息,其中“*”自动采用源程序名称,该信息提示用户是否确认可执行文件的名字,如果采用这个名称则按回车键,不采用则重新输入新名字。
图1-8LINK连接目标文件
(3)确认映象文件
在确认了可执行文件名后,则显示“Listfile[NUL.MAP]:
”信息,该信息表示不建立映象文件,如果用户不想建立映象文件,则回车确认;如果想建立,则输入映象文件名(一般与源程序同名),回车。
映象文件主要对段分配情况进行说明,如段的起始、终止地址、段长度、段名等。
(4)确认库文件的连接
库文件是经常使用的目标文件集合,主要是为了提高效率以及调试方便而建立的。
如果需要文件库中的某些目标文件时,则在“Libraries[.LIB]”后给出库的名称或路径。
5.运行程序
利用LINK对目标文件进行连接后,会产生后缀名为EXE的可执行文件,此时可以在命令提示符窗口直接输入该文件名,回车运行该程序。
五、实验内容与步骤
以显示“helloworld!
”的汇编语言源程序MYFILE.ASM为例练习汇编语言程序设计操作流程。
源程序如下:
datasegment
stringdb'helloworld!
$';数据定义
dataends
codesegment
assumecs:
code,ds:
data
start:
movax,data
movds,ax
leadx,string;显示字符串
movah,9
int21h
movah,4ch
int21h
codeends
endstart
(1)打开命令提示符窗口,进入包含汇编应用程序的相应文件夹。
(2)利用EDIT编辑源程序MYFILE.ASM,方法为输入“EDITMYFILE.ASM”,进入EDIT操作界面,然后输入上述源程序,保存并退出EDIT。
(3)利用MASM汇编源程序,方法为“MASMMYFILE.ASM”,如果有错误则返回
(2)进行修改,没有错误则进入(4)。
(4)利用LINK连接目标程序,方法为“LINKMYFILE.OBJ”。
(5)执行可执行文件,方法为“MYFILE.EXE”回车即可,此时屏幕上会显示出“helloworld!
”字样。
六、思考题
1.如何在汇编语言源程序中输入中文注释?
2.如何实现多个目标文件的连接?
实验二DEBUG的使用(验证性实验)
一、实验要求和目的
1.了解DEBUG的使用方法;
2.熟悉DEBUG基本命令;
3.掌握利用DEBUG查看程序运行结果的方法。
二、环境和设备
1.硬件环境:
微机CPU486以上,500MB以上硬盘,32M以上内存;
2.软件环境:
装有MASM5.0、DEBUG、LINK和EDIT等应用程序。
三、实验学时
2学时
四、预备知识
1.进入DEBUG
在编辑好源程序,汇编连接后,产生可执行文件,如果运行结果不符合要求或者没有直接显示结果,可以利用DEBUG进行查看或调试。
进入DEBUG的方法是:
DEBUG*.EXE或直接输入DEBUG
2.程序的调入
在DEBUG下调入程序的方法有两种,第一种是在进入DEBUG时直接调入,即在对源程序进行汇编、连接产生可执行文件后,在命令提示符窗口输入“DEBUG*.EXE”。
第二种是在DEBUG下通过N和L命令调入,方法为先利用N命令指定要调试的程序名称,然后再利用L命令将其装载到指定区域。
N命令的使用方法为:
“N*.EXE”,表示将该程序分配到CS:
5C开始的区域中。
L命令的使用方法为:
“L”。
表示将N命令指定的文件调入内存指定区域。
3.U命令的使用
U为反汇编命令,即将存储器内容翻译成汇编语言语句并显示其对应的地址、机器数和操作数等。
如图2-1所示。
U命令有三种使用方法:
(1)第一种为“U”,初次使用时显示从偏移地址0开始的若干条指令,再次使用则接着上次显示的偏移地址的指令开始显示后续指令;
(2)第二种用法为“U地址”,如“U13”表示显示从偏移地址0013开始的指令序列;
(3)第三种方法为“U范围”,如“U013”,表示显示从偏移地址0-13的指令。
图2-1U命令的使用
4.D命令的使用
D命令为显示内存数据指令。
可以查看存储器数据,其使用方法有如下几种,如图2-2所示:
(1)D段地址:
偏移地址
这种使用方法主要是查看某个规定段从偏移地址开始的数据内容。
例如,(DS)=2000H,想看数据段从偏移地址0开始的数据,就在DEBUG下输入“D2000:
0”。
(2)D
这种用法是查看默认段的数据,如果是首次使用,则查看的是代码段数据。
如果前面使用过D命令,则再使用“D”时,查看的是与前面使用过D命令查看的段,并接着前面查看显示的偏移地址显示数据。
例如,前面使用过“D142F:
0”,查看数据段从偏移地址0开始的数据,如图2-2所示,再次使用“D”,则显示142F:
0080开始的数据,就是接着显示数据段内容。
(3)D地址1地址2
这种用法是查看某个范围内的数据,如果不给段地址则默认查看代码段数据。
图2-2D命令的使用
5.G命令的使用
图2-3G命令的使用
G命令为运行程序指令。
主要有两种用法,如图2-3所示:
(1)G
没有断点的运行。
程序执行完毕会显示Programterminatednormally,表示程序正常结束。
(2)G偏移地址
带断点运行。
最多可以带10个断点,断点必须包含有效的指令码。
程序执行到一个断点地址时,会停下来,显示CPU各寄存器内容和各标志位的状态,以及下一条要执行的指令。
只要一个断点满足并执行,其余断点全部被取消,返回DEBUG。
6.T命令的使用
跟踪指令,可以跟踪一条或多条指令,每执行一条指令后就显示当前各寄存器内容和标志位状态,以及下一条要执行的指令。
T命令的缺点是,如果程序中有DOS或BIOS中断,它将跟踪到中断服务程序的内部,有时会出现死机现象。
其用法有两种,如图2-4所示:
图2-4T命令的使用
(1)T
单条指令跟踪,执行后显示寄存器内容和标志位状态,并显示下一条要执行的指令。
(2)T地址
多条指令跟踪,如T6,执行6条指令跟踪,每条指令执行后,显示所有寄存器内容及标志位情况。
第6条指令执行完成后,显示停止。
7.R命令的使用
检查和修改寄存器内容指令。
有三种功能,如图2-5所示:
图2-5R命令的使用
(1)R
显示所有寄存器内容,以及标志位状态和下一条要执行的指令。
(2)RREG
显示单个寄存器内容,并可以修改寄存器内容。
如RAX,回车后在屏幕上显示AX寄存器内容,如果需要修改AX内容,则直接输入16位数据,不需要修改则回车。
(3)RF
显示8个标志位状态,并可以修改其中任何一个或全部修改。
7.其他相关命令的使用
(1)Q命令
退出DEBUG命令。
(2)E命令
修改存储单元内容命令,默认对数据段进行操作。
有两种使用方法,如图2-6所示,一是E地址,对某个单元的数据进行修改,也可以完成多个连续单元的数据修改,方法是在第一次修改内容后,按空格键,则会出现下一个单元数据,在.后面输入修改内容,再按空格键,可以继续修改;二是E地址数据,对多个单元数据进行修改。
(3)F命令
填充命令,向内存单元中填充数据,用法为“F起始地址终止地址数据列表”,例如“F1430:
01430:
10FF34”,表示将段地址为1430的内存16个单元的数据用FF和34重复填充。
又如“F1425:
01425:
500010203040506”,表示将段地址为1425的内存5个单元的数据用后面列表的前5个数来填充。
(4)S命令
索引命令,从地址范围中检索出列表里的字符,如果找到则用找到字符的地址显示来标识,用法为“S起始地址终止地址列表”,默认对数据段进行操作。
如“S1430:
010‘e’”,表示在段地址为1430的前16个单元内查找e字符,如果找到则显示“1430:
0004”,表示偏移地址为4的单元是字符e。
(5)M命令
传送命令,把指定范围的内存单元数据传送到另一指定地址开始的存储区中,用法为“M起始地址终止地址存储起始地址”。
如“M1420:
0101420:
30”,表示将段地址为1420的前16个单元数据传送到1420:
30起始地址的单元中去。
图2-6E命令的使用
五、实验内容与步骤
1.编辑并调试下列程序,并说明运行结果是什么
datasegment
adb20h
bdb33h
cdb?
dataends
codesegment
assumecs:
code,ds:
data
start:
movax,data
movds,ax
moval,a
addal,b;加法运算,完成a+b
movah,0
adcah,0;构成ax
movbl,2;除数
divbl;除法运算,完成(a+b)/2
movc,al;保存结果到c单元
movah,4ch;程序结束
int21h
codeends
endstart
图2-7利用DEBUG查看结果
(1)利用EDIT将上述源程序编辑好,并取名s2.asm,退出EDIT;
(2)利用MASM汇编源程序,方法为“MASMs2.asm”;
(3)如果汇编操作没有错误,则利用LINK连接目标文件,方法为“LINKs2.obj”;如果有错误,则返回
(1)进行修改;
(4)连接没有问题则利用DEBUG进入调试状态,方法为“DEBUGs2.exe”,首先利用U命令,查看数据段地址,然后利用G命令运行程序,再用D命令查看结果。
如图2-7所示。
2.编辑并调试下列程序
datasegment
errmessdb'error!
',0ah,0dh,'$';错误信息提示
dataends
codesegment
assumecs:
code,ds:
data
start:
movax,data
movds,ax
l0:
movah,1;通过键盘输入单个字符数据
int21h
cmpal,'#';判断输入数据是否是#
jzdone;是则结束程序,转到done
cmpal,'A';不是则判断输入数据是否小于A
jberr;小于A代表输入的不是大写字母,转err显示错误提示
cmpal,'Z';大于A,则判断该数据是否大于Z
jaerr;大于Z,代表不是大写字母,转err显示错误提示
addal,20h;小于Z,表示是大写字母,加20H转成小写字母
movdl,al;显示该小写字母
movah,2
int21h
jmpl0;显示完毕转l0,继续输入数据
err:
leadx,errmess;显示错误提示信息
movah,9
int21h
jmpl0;显示完毕转l0,继续输入数据
done:
movah,4ch;程序结束
int21h
codeends
endstart
(1)利用EDIT编辑上述源程序,并保存为s3.asm,退出EDIT;
(2)利用MASM汇编源程序,方法为“MASMs3.asm”;
(3)如果汇编没有错误,则利用LINK连接目标文件,方法为“LINKs3.obj”;如果有错误则返回
(1)修改错误;
(4)运行程序,方法为“s3”,为测试程序的有效性,运行后先输入小写字母a,查看结果,再输入数字3,查看结果;再输入大写字母B,查看结果;再输入#,查看结果。
(5)利用DEBUG调试程序,方法为“DEBUGs3.exe”;首先利用U查看几个标号的偏移地址以及数据段的数据定义情况,如图2-8(a)所示;然后利用带断点的G命令,分别测试程序的功能,该程序有3个断点可以测试,分别是15H、1FH和29H,如图2-8(b)所示。
图2-8(a)利用DEBUG调试程序
图2-8(b)利用DEBUG调试程序
输入“G151F29”,此时等待从键盘输入数据,输入小写字母b,测试程序是否会转入1F分支,即输入有错,显示错误提示;
输入“G151F29”,此时等待从键盘输入数据,输入#,测试程序是否会转入29分支,即结束程序;
输入“G151F29”,此时等待从键盘输入数据,输入大写字母A,测试程序是否会转入15分支,即将输入的大写字母加20H转换为小写字母并显示;
六、思考题
1.第2题的断点15、29、1F是什么地址?
2.第2题为什么每次测试后,要重新进入DEBUG?
实验三基本运算程序设计(设计性实验)
一、实验要求和目的
1.了解汇编语言传送指令及算术运算类指令的使用方法;
2.熟悉利用DEBUG查看运算结果的基本方法;
3.掌握利用汇编语言实现多字节数据基本运算的方法。
二、环境和设备
1.硬件环境:
微机CPU486以上,500MB以上硬盘,32M以上内存;
2.软件环境:
装有MASM5.0、DEBUG、LINK和EDIT等应用程序。
三、实验学时
2学时
四、预备知识
1.汇编语言程序设计框架
(1)数据段定义
数据段主要完成程序所需数据的定义,主要包括三方面的数据:
一是数值型数据,其基本定义方法为“变量名数据类型数据”,例如“NDW1225,2302H
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 汇编语言程序设计 简化 汇编语言 程序设计 实验 指导书 定稿