《汇编语言程序设计》实验指导手册.docx
《《汇编语言程序设计》实验指导手册.docx》由会员分享,可在线阅读,更多相关《《汇编语言程序设计》实验指导手册.docx(15页珍藏版)》请在冰豆网上搜索。
《汇编语言程序设计》实验指导手册
《汇编语言程序设计》
实验指导手册
《汇编语言程序设计》实验是学习本课程的每个考生必须要通过的一个重要的实践环节。
本指导手册依照我系各类计算机专科专业教学大纲,根据人民邮电出版社的《汇编语言程序设计》(梁发寅著)教材编写而成。
本指导手册共计有编有10个实验,在实际实验过程中可以按照实际教学进度情况加以增删。
每个实验都应做到:
1.做好上机实验的准备工作:
应考者对每个实验需要进行预习,了解相关内容和具体要求,熟悉上机操作步骤,学会相关系统软件的使用,掌握各种操作调试命令。
2.编写源程序:
按照实验题目的要求,应考者要事先独立完成汇编语言源程序的编写工作,并对源程序进行认真的静态检查,减少错误的发生。
3.完成实验报告:
做完上机实验,应考者要严格按照实验报告的格式要求写出实验报告。
实验报告的内容为:
实验名称、实验的目的、实验的内容和要求、实验步骤、实验结果并附上源程序清单和程序流程图。
实验一汇编语言上机环境
(一)实验目的
熟悉汇编语言上机环境
掌握汇编语言上机过程与步骤
(二)实验器材与实验准备
实验器材:
硬件:
微机一台
软件:
DOS或WIN98/2000/XP
MASM.EXE和LINK.EXE
实验准备:
cs1segment
assumecs:
cs1,ds:
cs1
start:
pushcs
popds
movah,0
int10h
leadx,str0
movah,9
int21h
movah,4ch
int21h
str0db'hello','$'
cs1ends
endstart
(三)实验内容和要求
1.建立汇编源程序文件
2.逐步汇编,连接生成可执行文件
3.运行生成的可执行文件
(四)实验步骤:
1.在记事本中编辑原文件
2.将MASM.EXE和LINK.EXE以及原文件拷贝在同一目录下
3.汇编原文件
4.连接目标文件
5.执行可执行文件
(五)实验结果分析
在生成可执行文件过程中,一共生成了多少个相关的文件,它们的作用分别是什么?
实验二DEBUG的使用
(一)实验目的
1、熟悉DEBUG程序中的命令,学会在DEBUG下调试运行汇编语言源程
序。
2、掌握8086/8088的寻址方式及多字节数据的处理方法。
(二)实验设备
硬件环境:
IBM-PC及其兼容机
软件环境:
操作系统DOS3.0版本以上
调试程序DEBUG.COM
(三)实验内容和要求
实验内容:
1、利用DEBUG程序中的“E”命令,将两个多字节数“003F1AE7H”和
“006BE5C4H”分别送入起始地址为DS:
0200H和DS:
0204H两个单元中。
2、分别用直接寻址方式和寄存器间接寻址方式编写程序段,实现将DS:
0200H单元和DS:
0204H单元中的数据相加,并将运算结果存放在DS:
0208H单元中。
实验要求:
本次实验的内容均在DEBUG下完成,实现数据的装入、修改、显示;汇编语言程序段的编辑、汇编和反汇编;程序的运行和结果检查。
(四)预习要求
1、复习DOS启动方式和DOS有关命令的使用;
2、阅读本书后的附录,熟悉掌握DEBUG调试程序中的A、D、E、G、Q、
R、T、U命令的书写格式及功能;
3、复习寻址方式和相关的数据传送指令及算术运算指令。
(五)实验步骤
1、启动DOS操作系统
2、运行DEBUG.COM程序(若当前盘为C)
C>DEBUG↙
–;“(–”为DEBUG提示符,仅当屏幕出现该提示符后,才可输入DEBUG
命令)
3、用“A”命令编辑和汇编源程序
–A↙
186E:
0100MOVAX,[0200]
186E:
0103MOVBX,[0202]
186E:
0107ADDAX,[0204]
186E:
010BADCBX,[0206]
186E:
010FMOV[0208],AX↙
186E:
0112MOV[020A],BX↙
186E:
0116↙
4、用“U”命令反汇编验证源程序
–UCS:
0100↙
186E:
0100A10002MOVAX,[0200]
186E:
01038B1E0202MOVBX,[0202]
186E:
010703060402ADDAX,[0204]
186E:
010B131E0602ADCBX,[0206]
186E:
010FA30802MOV[0208],AX
186E:
0112891E0A02MOV[020A],BX
186E:
0116
注意:
检查源程序是否有错误,若有则返回到第3步用“A地址”命令进行修改,直到程序无错误。
DEBUG约定在其命令或源程序中所涉及到的数据均被看作十六进制数,其后不用“H”说明。
在DEBUG下,源程序中不能使用“标号”、“变量”和一些伪指令。
在DEBUG下,大小写不敏感。
5、程序未执行前,用“R”命令观察,相关寄存器的内容。
–R↙
如:
(AX)=0,(BX)=0,(SI)=0,
(DI)=0,(CS)=1680,(IP)=0。
6、在程序未执行前,用“D”命令观察DS:
0200H,DS:
0204H、DS:
0208H
单元的内容
–D20020B↙
7、用“G”命令运行源程序
–G=1100116↙
8、再用“D”命令观察DS:
0200H~DS:
020BH字节单元中的内容
–D20020B↙
9、用“T”单步操作命令对源程序单步执行,观察AX、BX、CS、IP寄存器内容的变化,并与预计的结果相比较。
注意:
D命令显示内存数据,注意观察多字节数据在内存中的存放方式。
指令执行的时候,IP寄存器随着变化,注意观察。
(六)实验结果分析
1、程序运行结果:
(AX)=00ab,h(BX)=00abh
DS:
0208H四字节单元的内容:
00ab00abh
实验三分支程序设计
(一)实验目的
1、掌握多路分支IF…ElseIF…Else程序结构和设计方法。
2、学会使用地址表和转移表法写多路分支程序。
(二)实验设备
实验器材:
硬件:
微机一台
软件:
DOS或WIN98/2000/XP
MASM.EXE和LINK.EXE
(三)实验内容和要求
实验内容:
在内存Score缓冲区中存放有20个学生的成绩数据,为无符号字节数。
假设学生成绩在[90,100]区间为优秀,在[80,90)区间为良好,在[70,80)区间为一般,在[60,70)区间为及格,在[0,60)区间为不及格,要求统计出不及格,及格,一般,良好和优秀的人数,分别送入Notpassed,Passed,Good,Better和Best字节单元。
用普通的跳转语句实现上述功能。
(四)预习要求
1、复习DOS启动方式和DOS有关命令的使用;
2、阅读本书后的附录,熟悉掌握DEBUG调试程序中的A、D、E、G、Q、
R、T、U命令的书写格式及功能;
(五)实验步骤
1.编写源程序
datasegment
Scoredb56,23,94,64,85,61,94,81,76,61,34,94,68,95,84,34,16,49,79,84
lenequ$-Score
Notpasseddb0
Passeddb0
Gooddb0
Betterdb0
Bestdb0
dataends
codesegment
assumecs:
code,ds:
data
start:
movax,data
movds,ax
movcx,len
movsi,0
re:
moval,score[si]
cmpal,60
jaef1
incnotpassed
jmpnext
f1:
cmpal,70
jaef2
incpassed
jmpnext
f2:
cmpal,80
jaef3
incgood
jmpnext
f3:
cmpal,90
jaef4
incbetter
jmpnext
f4:
incbest
en:
incsi
loopre
movah,4ch
int21h
codeends
endstart
2.汇编源程序
3.连接目标程序
4.调试可执行程序,分析程序的运行结果
(六)实验结果分析
1、确认不及格,及格,一般,良好和优秀的人数总和是否为20。
(七)编程提示
a)用普通的跳转语句实现上述功能时,区分不及格,及格,一般,良好和优秀5个区间,是一个5分支的结构,至少需要4条跳转指令。
b)注意无符号数和有符号数使用跳转指令的区别。
c)用地址表和转移表法实现时,必须找出分数与地址表和转移表的偏移的对应关系。
实验四循环程序设计
(一)实验目的
1、掌握多重循环程序的结构和设计方法。
2、弄清直接排序的算法。
3、弄清冒泡排序方法。
(二)实验设备
实验器材:
硬件:
微机一台
软件:
DOS或WIN98/2000/XP
MASM.EXE和LINK.EXE
(三)实验内容和要求
实验内容:
在内存Score缓冲区中存放有20个学生的成绩数据,为无符号字节数。
设计程序完成如下功能:
将最高和最低的分数分别存放在MIN和MAX单元中。
(四)预习要求
1、复习DOS启动方式和DOS有关命令的使用;
2、阅读本书后的附录,熟悉掌握DEBUG调试程序中的A、D、E、G、Q、
R、T、U命令的书写格式及功能;
(五)实验步骤
1.编写源程序
Datasegment
Dadw4546h,9414h,6445h,8745h,6136h,1264h,5555h
Numdw($-da)/2;填空(当前地址-da)/2
Maxdw?
Mindw?
Dataends
Codesegment
Assumecs:
code,ds:
data
Start:
movax,data
movds,ax
movcx,num
movax,da
movdx,da
movsi,0
re:
cmpda[si],ax
jleskip1;如果小于等于就跳过
movax,da[si]
skip1:
cmpda[si],dx
jgeskip2;>=跳过
movdx,da[si]
skip2:
addsi,2
loopre
movmax,ax
MOVMIN,DX
MOVAH,4CH
INT21H
CODEENDS
ENDSTART
2.汇编源程序
3.连接目标程序
4.调试可执行程序,分析程序的运行结果
(六)实验结果分析
1、循环次数NUM的定义有何特点
以符号定义,不占用内存空间
2、DEBUG调试分析是否得到正确结果
(七)编程提示
(a)无符号数的比较是用ja,jc,je
实验五子程序设计
(一)实验目的
1、掌握子程序的设计方法和调用方式
2、深刻认识堆栈在子程序设计中所起的作用
3、掌握子程序调试的技巧。
(二)实验设备
实验器材:
硬件:
微机一台
软件:
DOS或WIN98/2000/XP
MASM.EXE和LINK.EXE
(三)实验内容和要求
实验内容:
将数值1234和56H,用十进制将它们显示,要求用子程序的方式来实现显示功能.
(四)预习要求
1、复习DOS启动方式和DOS有关命令的使用;
2、阅读本书后的附录,熟悉掌握DEBUG调试程序中的A、D、E、G、Q、
R、T、U命令的书写格式及功能;
(五)实验步骤
1.编写源程序
;要求编写一个子程序,这个子程序能自动将AX的数值以十进制的形式输出
CODESEGMENT
ASSUMECS:
CODE
START:
MOVAX,1234
CALLPRI
movdl,10;换行
movah,2
int21h
movdl,13;回车
movah,2
int21h
MOVAX,56H
CALLPRI
movah,4ch
int21h
priprocnear
pushbx
pushcx
pushdx
movbx,10;十进制
movdx,0;被除数的高16位
movcx,0;位数
rediv:
divbx;dxax/bx
pushdx;余数
movdx,0
inccx
cmpax,0
jnzrediv
movah,2
reout:
popdx
adddl,30h;将数值位-〉字符1-'1'
int21h
loopreout
popdx
popcx
popbx
ret
priendp
codeends
endstart
2.汇编源程序
3.连接目标程序
4.调试可执行程序,分析程序的运行结果
(六)实验结果分析
1、理解寄存器参数传递方式各有什么特点
使用简单方便
数量少,难以传递多个数据
(七)编程提示
(a)二进制显示也可采用移位并判断该位的方式进行。
(b)十进制数采用除以10取商的方式。
(d)注意去掉最高位的“0”。
实验六中断程序设计
(一)实验目的
1、中断服务子程序的编写。
2、BIOS和DOS中断调用。
(二)实验设备
硬件环境:
IBM-PC及其兼容机软件环境:
操作系统DOS3.0以上
编辑程序EDIT或其它编辑程序汇编程序MASM.EXE6.1X连接程序LINK.EXE
调试程序DEBUG.COM
(三)实验内容和要求
实验内容:
1.编写一个完成的程序,用于输入一个小写字母,输出大写字母。
要求:
分别用BIOS和DOS中断调用来实现
(四)实验准备
1、复习DOS启动方式和DOS有关命令的使用;
2、阅读本书后的附录,熟悉掌握DEBUG调试程序中的A、D、E、G、Q、
R、T、U命令的书写格式及功能;
3、分析BIOS和DOS中断调用的功能和区别
(五)实验步骤
1.编写源程序
;DOS功能调用输入字符,如果是小写,就改成大写
codesegment
assumecs:
code
start:
MOVsi,5
re:
movah,1
int21h
pushax
movdl,13;回车
movah,2
int21h
movdl,10;
movah,2
int21h
popax
cmpal,'a'
jbskip
cmpal,'z'
JASKIP
SUBAL,32
SKIP:
MOVAH,2
MOVDL,AL
INT21H
movdl,13;回车
movah,2
int21h
movdl,10;回车
movah,2
int21h
subsi,1
jnzre
MOVAH,4CH
INT21H
CODEENDS
ENDSTART
;BIOS功能调用输入字符,如果是小写,就改成大写
codesegment
assumecs:
code
start:
MOVsi,5
re:
movah,0
int16H
pushax
movAl,13;回车
movah,E
int10h
movAl,10;
int10h
popax
cmpal,'a'
jbskip
cmpal,'z'
JASKIP
SUBAL,32
SKIP:
MOVAH,0
INT10H
movAl,13;回车
movah,E
int10h
movAl,10;
int10h
subsi,1
jnzre
MOVAH,4CH
INT21H
CODEENDS
ENDSTART
2.汇编源程序
3.连接目标程序
4.调试可执行程序,分析程序的运行结果
(六)实验结果分析
利用实验中源程序中的输出方法,分析BIOS和DOS中断调用的功能和区别。
BIOS功能调用功能更为强大,但参数设置复杂
DOS功能调用实现相对简单,但功能不如BIOS强
DOS功能调用格式相对固定,根据AH值不同,使得在执行INT21H指令时有不同功能
BIOS调用对不同的设备,int后所接参数都不一样,而且AH的值也决定其操作