汇编语言程序设计实验指导书.docx
《汇编语言程序设计实验指导书.docx》由会员分享,可在线阅读,更多相关《汇编语言程序设计实验指导书.docx(78页珍藏版)》请在冰豆网上搜索。
汇编语言程序设计实验指导书
重庆师范大学涉外商贸学院
计算机各专业实验用书
汇编语言程序设计
实验指导书
(第一版)
张开成编
前言
为适应教学内容由简到繁、由易到难、由浅入深的教学特点,我们编写了这本简易实验指导书,用以指导实验教学。
该指导书分两部分,第一部分指出实验的实验目的、实验内容、实验准备、实验要求、共提出十五个实验,需三十个学时完成。
第二部分为十五个实验的全部程序,仅供学生参考。
该实验指导书由数计学院计算机教研室张开成同志编写。
2010年2月
第一部分提出各实验的实验内容、实验目的、实验要求和学时分配
实验一:
汇编语言基本操作实验(2学时)
一、实验目的:
明确QE、MASM、LINK三个系统软件的作用。
掌握汇编语言程序的编辑、汇编、连接过程。
二、实验内容:
1、编写一个程序:
用十进制输出一个按键的ASCⅡ值。
2、从键盘上读入两个一位数(必须保证按下数字键),输出它们的积。
三、实验准备:
1、预习QE、MASM、LINK三个软件的使用方法。
2、按实验要求,编写好实验源程序。
四、实验步骤:
1、用QE编辑扩展名为.ASM的源文件。
2、汇编、连接生成扩展名为.EXE的可执行文件。
3、运行程序。
五、实验报告要求:
1、总结用QE编辑源程序的方法。
2、说明源程序的连接、汇编过程。
3、分析运行结果。
4、按要求写出完整的实验报告(必须列出程序清单)。
实验二:
分支程序设计实验(2学时)
一、实验目的:
1、学会简单分支和多分支程序的设计方法。
2、掌握程序的调试方法。
二、实验内容:
1、从键盘读入两个一位数,输出它们的积。
若为非数字键,则显示字符“E”,退出程序。
2、从键盘接收一个按键,如为小写字母,则显示“L”,是大写字母,则显示“U”,如是数字,则显示“N”,都不是则显示“*”。
三、实验准备:
1、预习分支程序设计方法。
2、按实验内容要求,编写好实验源程序。
四、实验步骤:
1、用QE编辑扩展名为.ASM的源文件。
2、汇编、连接生成可执行文件.EXE。
3、运行程序。
五、实验报告书要求:
1、列出调试成功后的程序清单。
2、分析运行结果。
3、按要求写出完整的实验报告。
实验三:
循环及循环嵌套程序设计实验(2学时)
一、实验目的:
1、学会单循环及多重循环程序的设计方法。
2、掌握程序的调试方法。
二、实验内容:
1、编写一完整程序,在一行上依次显示26个大写英文字母。
2、在屏幕上显示如图所示数字拼成的形状。
0123456789
1234567890
2345678901
3456789012
4567890123
5678901234
6789012345
7890123456
8901234567
9012345678
三、实验准备:
1、预习循环程序设计方法。
2、按实验内容要求编写好实验源程序。
四、实验步骤:
1、用QE编辑扩展名.ASM的源文件。
2、汇编、连接生成可执行文件.EXE。
3、运行程序。
五、实验报告书要求:
1、列出调试成功后的程序清单。
2、分析运行结果。
3、按要求写出完整的实验报告。
实验四:
字符串输入输出程序设计实验(2学时)
一、实验目的:
1、掌握DOS系统功能调用的基本知识。
2、学会利用DOS系统功能调用设计输入输出程序。
二、实验内容:
1、设计一个程序,在屏幕上输出如下图形:
9
89
789
6789
56789
456789
3456789
23456789
123456789
3、从键盘读入一个字符串(不超过80个字符,且不含‘$’),在下一行上原样输出该串。
4、设计一个程序,判断一个输入字符串中是否有‘abc’作为它的子串。
三、实验准备:
1、预习DOS系统功能调用及有关伪指令的知识。
2、按实验内容要求,编写好实验源程序。
四、实验步骤:
1、用QE编辑扩展名为.ASM的源文件。
2、汇编、连接生成可执行文件.EXE。
3、运行程序。
五、实验报告书要求:
1、列出调试成功后的程序清单。
2、分析运行结果。
3、按要求写出完整的实验报告。
实验五:
字符处理程序实验(2学时)
一、实验目的:
1、熟悉串操作指令的功能与应用。
2、掌握串操作指令的寻址方式及使用方法,编写常用的字符串处理程序
二、实验内容:
1、字符串统计:
自BUFFER开始的内存单元中,存有一个ASCⅡ码字符串。
统计其中含有多少个子字符串‘AB’,将统计结果以十进制形式显示输出。
2、在给定的字符串中插入一任意字符。
、
3、对已有的字符串按指定的位置删除一个字符。
三、实验准备:
1、预习字符处理概念,字符处理方法和字符处理程序的设计。
2、预习有关串操作指令及其寻址方式的特点,正确使用串操作指令。
3、按实验内容要求,编写好实验源程序。
四、实验步骤:
1、编辑源程序.ASM。
2、汇编、连接生成可执行文件.EXE。
3、运行程序。
五、实验报告书要求:
1、整理每一个运行正确的源程序,列出源程序清单。
2、总结汇编语言对字符串操作的编程特点和方法。
3、总结字符串处理程序的编程方法,突出改进和完善此类程序设计的方案。
实验六:
子程序设计实验(2学时)
一、实验目的:
1、掌握子程序有关基本知识,学会子程序设计方法。
2、掌握调用程序与子程序的调试方法。
二、实验内容:
1、把输入的一个字符串从指定的符号起截断,显示截断后的结果。
把回车换行设计为近程子程序。
2、实现加法及减法子程序的调试方法。
三、实验准备:
1、预习子程序设计方法。
2、按实验内容要求,编写好实验源程序。
四、实验步骤:
1、用QE编辑扩展名为.ASM的源文件。
2、汇编、连接生成可执行文件.EXE。
3、运行程序。
五、实验报告要求:
1、列出调试成功后的程序清单。
2、分析运行结果。
3、按要求写出完整的实验报告。
实验七:
算术运算程序实验(2学时)
一、实验目的:
1、熟悉算术运算指令的功能与应用。
2、学习编写加法和乘法运算程序。
二、实验内容:
1、编写计算23579+7684和0A5H+34H的二进制运算程序。
2、多字节加法:
在内存中以FIRST和SECOND开始的单元中分别存放有两位压缩十进制(BCD)码,低位码在前。
求这两个数的压缩十进制数和,并存到THIRD开始的单元中。
3、二进制乘法:
(1)在内存DATA1和DATA2单元中分别存放着两个八位无符号二进制数A、B,求A乘以B的积,结果存于DATA3开始的内存单元中。
(2)在FIRST和SECOND开始单元中,分别存放着两个16位带符号数D、E,求D*E,结果存于THIRD开始的内存单元中。
三、实验准备:
1、认真预习加法、乘法和十进制调整指令。
2、按实验内容要求,编写好实验源程序。
四、实验步骤:
1、编辑源程序.ASM。
2、调试并运行程序。
五、实验报告要求:
1、整理好运行正确的源程序,列出调试成功后的程序清单。
2、总结加法、乘法运算程序的设计方法。
3、若要求直接在屏幕上显示运行结果,程序将做如何修改?
实验八:
排序和检索程序实验(2学时)
一、实验目的:
1、熟悉用汇编语言编制一些常用的非数字值处理的程序。
2、练习编制具有子程序库操作的汇编语言程序。
二、实验内容:
1、将内存中10个无符号数由小到大排序。
(每个数为16位二进制数)
2、在上述已排好的数据区里查找某一个数,若找到,显示其在数据区的位置,否则显示‘N’字符。
3、把上述两个程序改编成子程序,并存入子程序库中。
然后编写调用程序,完成排序及检索任务。
三、实验准备:
1、仔细阅读关于子程序操作部分,熟悉上机操作。
2、预习排序和检索算法。
3、准备数据,按选择好的算法编制源程序。
数据以数据区定义和键盘输入两种方法提供。
四、实验步骤:
1、将编好的源程序操作部分,建立.ASM。
2、汇编、连接并运行程序。
3、最后运行成功的排序和检索程序,改为子程序,调试无误后存入子程序库,再调用运行。
五、实验报告要求:
1、整理出运行正确的源程序清单。
2、说明子程序库的建立和应用方法,指出它们的应用特点。
实验九:
整数输入与输出程序实验
一、实验目的:
1、学会编写整数输入、输出子程序的方法。
2、掌握子程序共享的方法。
二、实验内容:
在磁盘上建立3个文件CR.ASM,WRITE.ASM和READ.ASM,分别存放CR、WRITE和READ子程序的程序清单。
使用INCLUDE伪指令编写完整程序,从键盘上读入两个整数,求它们的和。
三、实验内容:
1、预习子程序共享的方法。
2、预习整数输入、输出方法。
四、实验步骤:
1、在磁盘上建立3个文件CR.ASM、WRITE.ASM和READ.ASM。
2、编写完整程序并汇编,连接生成可执行文件.EXE。
3、运行程序。
五、实验报告要求:
1、总结整数输入、输出的方法。
2、总结子程序共享的方法。
实验十:
中断程序设计实验
一、实验目的:
1、熟悉中断有关概念,掌握常驻内存技术。
2、掌握修改中断向量技术。
二、实验内容:
编写一个时钟程序,要求把时钟信号显示在屏幕的右上角,并在程序结束后常驻内存。
三、实验准备:
1、预习有关中断程序设计的有关内容。
2、按实验内容要求,编制实验源程序。
四、实验步骤:
1、建立源程序.ASM。
2、汇编、连接,生成可执行文件.EXE。
五、实验报告要求:
1、整理并列出调试成功后的源程序清单。
2、分析运行结果。
实验十一:
系统调用及程序设计实验(2学时)
一、实验目的:
掌握DOS和BIOS系统功能调用,学会键盘与屏幕控制技术。
二、实验内容:
1、在屏幕10行20—24列处显示五朵梅花,颜色各异,且要求中间一朵能够闪烁。
2、在屏幕上画出一条下斜的彩色变换的直线。
三、实验准备:
按实验内容要求,准备好实验源程序。
四、实验步骤:
1、建立源程序.ASM。
2、汇编、连接,生成可执行文件.EXE。
3、运行程序。
五、实验报告要求:
1、整理并列出调试成功后的源程序清单。
2、分析运行结果。
实验十二《综合实验一》:
显示月份名direct(2学时)
一、实验目的:
训练学生的综合应用能力。
二、实验内容:
试编写一程序,要求根据用户键入的月份在终端上显示该月的英文综写名。
三、实验要求:
按实验内容要求,准备好实验源程序。
四、实验步骤:
1、建立源程序.ASM。
2、汇编、连接,生成可执行文件.EXE.
3、运行程序.
五、实验报告要求:
1、整理并列出调试成功后的源程序清单。
2、分析运行结果。
实验十三《综合实验二》:
显示学生名次表(2学时)
一、实验目的:
训练学生的综合应用能力。
二、实验内容:
试编写一程序,要求接收从键盘输入的一个班的学生成绩,并存放于50字的grade数组中,其中grade+1保存学号为了i+1的学生的成绩。
然后根据grade中的学生成绩,把学生名次填入50字的rank数组中,其中rank+1的内容是学号为i+1学生的名次,再按学号顺序把名次从终端上显示出来。
三、实验要求:
按实验内容要求,准备好实验源程序。
四、实验步骤:
1、建立源程序.ASM。
2、汇编、连接,生成可执行文件.EXE。
3、运行程序。
五、实验报告要求:
1、整理并列出调试成功后的源程序清单。
2、分析运行结果。
实验十四《综合实验三》:
计算工资Scremp(2学时)
一、实验目的:
训练学生的综合应用能力。
二、实验内容:
试编写一程序,接收用户输入的工作时间及工资率(即每小时的工资数),显示计算而得的工资数。
三、实验要求:
按实验内容要求,准备好实验源程序。
四、实验步骤:
1、建立源程序.ASM。
2、汇编、连接,生成可执行文件.EXE。
3、运行程序。
五.实验报告要求:
1、整理并列出调试成功后的源程序清单。
2、分析运行结果。
实验十五《综合实验四》:
字符图形显示程序(2学时)
一、实验目的:
训练学生的综合应用能力。
二.实验内容:
试编写一程序实现以下功能:
使一个特定字符从左下角上升到右上角,然后回到左下角,再上升到右上角,重复运行,直到按任意键时退出。
三.实验要求:
按实验内容要求,准备好实验源程序。
四、实验步骤:
4、建立源程序.ASM。
5、汇编、连接,生成可执行文件.EXE。
6、运行程序。
五.实验报告要求:
1.整理并列出调试成功后的源程序清单。
2.分析运行结果。
第二部分各实验程序参考清单
实验一:
汇编语言基本操作实验
1、用十进制输出一个按键的ASCII值
codeSEGMENT
ASSUMECS:
code
main:
MOVAH,1
INT21H
MOVAH,0
MOVBL,100
DIVBL
MOVCL,AL
ADDCL,30H
MOVAL,AH
MOVAH,0
MOVBL,10
DIVBL
ADDAL,30H
ADDAH,30H
MOVBX,AX
MOVAH,2
MOVDL,13
INT21H
MOVDL,10
INT21H
MOVDL,CL
INT21H
MOVDL,BL
INT21H
MOVDL,BH
INT21H
MOVAH,4CH
INT21H
codeENDS
ENDmain
2、从键盘读入两个一位数(按键博爱正按下的是数字键),输出它们的积。
codeSEGMENT
ASSUMECS:
code
main:
MOVAH,1
INT21H
MOVBL,AL
MOVAH,2
MOVDL,13
INT21H
MOVDL,10
INT21H
MOVAH,1
INT21H
SUBAL,30H
SUBBL,30H
MULBL
MOVBL,10
DIVBL
ADDAX,3030H
MOVBX,AX
MOVAH,2
MOVDL,13
INT21H
MOVDL,10
INT21H
MOVDL,BL
MOVAH,2
INT21H
MOVDL,BH
INT21H
MOVAH,4CH
INT21H
codeENDS
ENDmain
实验二:
分支程序设计实验
1、从键盘读入两个一位数,输出它们的积。
若为非数字键,则显示字符“E”,退出程序。
codeSEGMENT
ASSUMECS:
code
main:
MOVAH,1
INT21H
CMPAL,’0’
JBlab1
CMPAL,’9’
JAlab1
MOVBL,AL
MOVAH,2
MOVDL,13
INT21H
MOVDL,10
INT21H
MOVAH,1
INT21H
CMPAL,’0’
JBlab1
CMPAL,’9’
JAlab1
SUBAL,30H
SUBBL,30H
MULBL
MOVBL,10
DIVBL
ADDAX,3030H
MOVBX,AX
MOVAH,2
MOVDL,13
INT21H
MOVDL,10
INT21H
MOVDL,BL
MOVAH,2
INT21H
MOVDL,BH
INT21H
JMPlab2
Lab1:
MOVAH,2
MOVDL,’E’
INT21H
Lab2:
MOVAH,4CH
INT21H
CodeENDS
ENDmain
2、从键盘上接收一个按键,如果按键是小写字母则输出“L”,是大写字母则输出“U”,如果是数字则输出“N”,都不是则输出“*”。
codeSEGMENT
ASSUMECS:
code
start:
MOVAH,1
INT21H
CMPAL,’0’
JBlab1
CMPAL,’9’
JAlab2
MOVDL,’N’
JMPlab3
Lab2:
CMPAL,’A’
JBlab1
CMPAL,’Z’
JAlab4
MOVDL,’U’
JMPlab3
lab4:
CMPAL,’a’
JBlab1
CMPAL,’z’
JAlab1
MOVDL,’L’
JMPlab3
lab1:
MOVDL,’*’
lab3:
MOVAH,2
INT21H
MOVAH,4CH
INT21H
codeENDS
ENDstart
实验三:
循环及循环嵌套程序设计实验
1、设计一完整程序,在一行依次显示26个大写英文字母。
codeSEGMENT
ASSUMECS:
code
start:
MOVCX,26
MOVDL,’A’
lab1:
MOVAH,2
INT21H
ADDDL,1
LOOPlab1
MOVAX,4C00H
INT21H
codeENDS
ENDstart
2、在屏幕上显示如下由数字拼成的形状:
0123456789
1234567890
2345678901
3456789012
4567890123
5678901234
6789012345
7890123456
8901234567
9012345678
codeSEGMENT
ASSUMECS:
code
main:
MOVBL,0
lab1:
MOVCX,10
MOVDL,‘0’
ADDDL,BL
lab2:
MOVAH,2
INT21H
ADDDL,1
CMPDL,’9’
JBElab3
MOVDL,’0’
lab3:
LOOPlab2
MOVDL,13
INT21H
MOVDL,10
INT21H
ADDBL,1
CMPBL,10
JBlab1
MOVAX,4C00H
INT21H
codeENDS
ENDmain
实验四:
字符串输入输出程序设计实验
1、设计一个完整程序,在屏幕上输出下面的图形。
9
89
789
6789
56789
456789
3456789
23456789
123456789
DataSEGMENT
BufDB‘123456789’,13,10,24H
DataENDS
CodeSEGMENT
ASSUMEDS:
data,CS:
code
Main:
MOVDX,data
MOVDS,DX
MOVCX,9
LEADX,[buf+8]
MOVAH,9
Lab:
INT21H
SUBDX,1
LOOPlab
MOVAX,4C00H
INT21H
CodeENDS
ENDmain
2、键盘读入一个字符串(不超过80个字符,且不含‘$’),到下一行上原样输出该串。
DATASEGMENT
BUFDB80,81DUP(0)
DATAENDS
CODESEGMENT
ASSUMEDS:
DATACS:
CODE
MAIN:
MOVDX,DATA
MOVDS,DX
LEADX,[BUF]
MOVAH,10
INT21H
MOVBL,[BUF+1]
MOVBH,0
MOV[BUF+BX+2],’$’
MOV[BUF+1],10
LEADX,[BUF+1]
MOVAH,9
INT21H
MOVAX,4C00H
INT21H
CODEENDS
ENDMAIN
3、设计一个程序,判断一个输入字符串中是否有“abc”作为它的子串。
ASSUMECS:
CODE,DS:
DATA
DATASEGMENT
ORIDB‘ABC’
LEN=$-ORI
BUFDB80
ORG$+81
DISP1DB13,10,’YES,$’
DISP2DB13,10,’NO,$’
DATAENDS
CODESEGMENT
M:
MOVAX,SEGBUF
MOVDS,AX
LEADX,BUF
MOVAH,10
INT21H
MOVCL,[BUF+1]
CMPCL,LEN
JBNO
MOVCH,0
MOVBX,OFFSETBUF+2
N2:
MOVSI,0
N1:
MOVAL,[BX+SI]
CMPAL,[ORI+SI]
JNEN3
INCSI
CMPSI,LEN
JAEYES
JMPN1
N3:
INCBX
LOOPN2
NO:
LEADX,DISP2
JMPN4
YES:
LEADX,DISPI
N4:
MOVAH,9
INT21H
MOVAH,4CH
INT21H
CODEENDS
ENDM
实验五:
字符处理程序实验
1、字符串统计:
自BUFFER单元开始内存单元中,存有一个ASCⅡ码字符传,统计其中含有多少个字符串‘AB’,将统计结果以十进制形式显示输出。
DATASEGMENT
BUFDB‘ASTABABABABAABAJKDLAB’
COUNTEQU$-BUF
BUF1DB3DUP(?
)
DATAENDS
STACKSEGMENTPARASTACK‘STACK’
DB100DUP(?
)
STACKENDS
CODESEGMENT
ASSUMECS:
CODE,DS:
DATA,SS:
STACK,ES:
DATA
STACKPROCFAR
PUSHDS
MOVAX,0
PUSHAX
MOVAX,DATA
MOVDS,AX
MOVSI,OFFSETBUF
MOVCX,COUNT
MOVBX,0
MOVAH,0
LOOP1:
MOVAL,[SI]
CMPAL,‘A’
JNZLESS
INCSI
DECCX
JZOK
MOVAL,[SI]
CMPAL,‘B’
JNZLOOP1
MOVAL,BL
ADDAL,1
DAA
MOVBL,AL
LESS:
INCSI
LOOPLOOP1
OK:
MOVDI,OFFESTBUF1
MOVDL,BL
SHRBL,1
SHRBL,1
SHRBL,1
SHRBL,1
MOVAL,30H
ADDAL,BL
MOV[DI],AL
INCDI
ANDDL,0FH
ADDDL