《汇编语言程序设计》实验教学大纲.docx
《《汇编语言程序设计》实验教学大纲.docx》由会员分享,可在线阅读,更多相关《《汇编语言程序设计》实验教学大纲.docx(21页珍藏版)》请在冰豆网上搜索。
《汇编语言程序设计》实验教学大纲
《汇编语言程序设计》实验教学大纲
课程号:
080503101301课程类别:
专业基础课
适用专业:
计算机科学与技术专业
课程总学时:
34实验学时:
17
大纲编写人:
\\\编写时间:
2010年6月18日
【实验目标要求】
《汇编语言程序设计》是计算机科学与技术专业必修的专业基础课程。
汇编语言程序设计实验的目标是学习汇编语言程序设计的基本方法和技能,熟练掌握用汇编语言设计、编写、调试和运行程序的方法,汇编语言程序实验的内容与计算机硬件特性联系紧密。
通过上机实验的学习,使学生不仅能加深理解和巩固理论课所学的知识,而且还能了解计算机的底层软件的工作过程,为今后学习后续课程打好良好的基础。
【实验学习要求】
认真阅读《IBM-PC汇编语言程序设计》教材中与实验相关的章节内容,提前做好实验预习,做到在每个实验前明确实验目的、掌握实验的基本内容及操作方法;在实验中正确使用实验设备,认真观察、分析实验结果;实验后要根据要求做好总结,上交实验报告。
具体要求如下:
1.上机前,要作好充分准备,包括程序框图、源程序清单、调试步骤、测试方法、对运行结果的分析等。
2.上机时,要熟悉与实验有关的系统软件(如编辑程序、汇编程序、连接程序、调试程序)的使用方法;在程序调试过程中,有意识的学习及掌握Debug的各种操作命令,以便掌握程序的调试方法及技巧;程序调试完后,须由实验辅导教师在机器上检查运行结果。
3.上机后,应写出实验报告,及时总结。
4.遵守实验室的规章制度,爱护实验设备。
【实验计划】
实验序号
实验项目内容
学时
实验一
IBM-PC寻址方式及DEBUG的使用
3
实验二
熟悉指令系统
3
实验三
建立运行汇编语言程序
3
实验四
循环程序设计
2
实验五
分支程序设计
2
实验六
子程序设计
2
实验七
I/O程序设计
2
【实验教材及主要参考资料】
教材:
1.《IBM-PC汇编语言程序设计(第二版)》,沈美明、温冬蝉编著,清华大学出版社,2001.8。
2.《IBM-PC汇编语言程序设计实验教程》,沈美明、温冬蝉、张赤红编著,清华大学出版社,2008.2。
【实验任务】
实验一、IBM-PC寻址方式及DEBUG的使用
实验目的:
1.熟悉DEBUG的功能,运行并掌握其常用命令。
2.使用DEBUG,通过数据传送指令观察IBM-PC机各种寻址方式的区别。
实验内容:
1.DEBUG的加载及其常用命令(A、U、R、D、E、T、P、G、Q)的使用情况。
(注意:
微机进入DEBUG状态下之后,一切立即数和地址数据均被默认为十六进制数,在输入时数的后面不加后缀“H”。
)
2.将数据段中的两个数求和,结果保存在数据段中。
源程序、机器语言程序如下:
CS:
0100Al0000MOVAX,[0000]
CS:
010303060200ADDAX,[0002]
CS;0107A30400MOV[0004],AX
CS:
010ACBRETF
数据段内容如下:
DS:
000023012500;两个已知数
3.在Debug中编制简单的汇编程序片断,并调试运行,得出结果。
实验主要步骤:
1.在DOS或Windows的命令行窗口执行命令Debug.exe,进入Debug程序环境,熟悉Debug各个命令的用法。
2.实验步骤
(1)用E命令键人上述机器语言程序和数据段的初值。
—EDS:
00023012500
—EDS:
0062A2A2A(2A为*,是为便于查看数据段内容而设置)
—ECS:
100A1000003060200
—ECS:
107A30400CB
(2)用D命令检查数据段、代码段内容。
—DDS:
0
—DCS:
100
(3)用T命令逐条执行上述程序,注意观察每条指令执行后相应寄存器的变化。
(4)用U命令反汇编本程序。
—U10010A
(5)用R命令修改IP的内容为0100重新执行上述程序。
—RIP
显示:
IP010A
:
0100
(6)用G命令运行程序。
—G=CS:
0100107
观察:
IP=AX=
—G=CS:
010010A
观察:
IP=AX=
3.自己试着写段程序:
-A100↙
16C6:
0100DB‘1234567890‘↙
16C6:
010ACLD↙
16C6:
010BMOVSI,100↙
16C6:
010EMOVDI,200↙
16C6:
0111MOVCX,A↙
16C6:
0114REPMOVSB↙
16C6:
0116↙
-G=10A116↙;运行上述程序(起始地址10AH,结束地址116H)。
-D100LA↙;显示DS:
100开始10个字节内容
16C6:
01003132333435363738-3930‘1234567890
-DES:
200LA↙显示ES:
100开始10个字节内容
16C6:
02003132333435363738-3930‘1234567890
4.写出实验报告。
实验二、熟悉指令系统
实验目的:
1.熟悉8088/8086的指令书写格式、功能。
2.能熟练运用数据传递、算术、逻辑三类指令。
实验内容:
1.用DEBUG调试程序功能编程序计算(W—(X×Y+Z—540))/X。
其中X、Y、Z、W均为16位带符号数,要求上式计算结果的商存人AX寄存器中,余数存人DX寄存器。
掌握算术指令的用法。
2.用DEBUG编程并查看逻辑指令的运行结果,掌握逻辑指令的用法。
3.熟悉其它几组指令的功能和用法,并区分字、字节操作。
实验主要步骤:
1.预先编制程序片段,实现(W—(X×Y+Z—540))/X,将计算结果的商存人AX寄存器中,余数存人DX寄存器。
参考程序代码如下:
DATASEGMENT
XDW1200H
YDW0034H
ZDW0F045H
WDW034AH
DATAENDS
CODESEGMENT
ASSUMECS:
CODE,DS:
DATA
START:
MOVAX,X
IMULY
MOVCX,AX
MOVBX,DX
MOVAX,Z
CWD
ADDCX,AX
ADCBX,DX
SUBCX,540
SBBBX,0
MOVAX,W
CWD
SUBAX,CX
SBBDX,BX
IDIVX
MOVAH,4CH
INT21H
CODEENDS
ENDSTART
2.可以在Debug程序中使用E命令为变量X、Y、Z、W设置初值。
3.使用A命令汇编程序片段,并用G或T命令执行,用R或D命令查看结果。
4.使用A命令汇编几条逻辑指令,并运行,查看结果。
5.写出实验报告。
实验三、建立运行汇编语言程序
实验目的:
1.掌握汇编语言程序格式及其它命令的作用。
2.掌握汇编、连接、运行汇编程序的全过程,并能检查修攙程序简单错误。
实验内容:
1.编写程序,比较两个字符串STRINGl和STRING2所含的字符是否相同。
若相同,则显示'Match';否则,显示'Nomatch'。
2.编辑、汇编、连接这个汇编语言源程序,形成.EXE文件。
3.通过DEBUG调试运行该可执行文件,查看运行结果。
实验主要步骤:
1.根据要求编制汇编源程序。
参考程序如下:
DATASEGMENT
STRINGlDB‘Movethecursorbackward.’
STRING2DB‘Movethecursorbackward.’
MESSlDB‘Match.’,13,10,‘$’
MESS2DB‘NOMatch!
’,13,10,‘$’
DATAENDS
PROGSEGMENT
ASSUMECS:
PROG,DS:
DATA,ES:
DATA
START:
MOVAX,DATA
MOVDS,AX
MOVES,AX
LEASI,STRINGl
LEADI,STRING2
CLD
MOVCX,25
REPZCMPSB
JZMATCH
LEADX,MESS2
JMPSHORTDISP
MATCH:
LEADX,MESSl
DISP:
MOVAH,09
1NT21H
MOVAH,4CH
INT21H
PROGENDS
ENDSTART
2.使用记事本或其它字处理软件(Edit.exe)编辑该源文件。
3.使用Masm、Link程序汇编、连接该文件,形成可执行的.EXE文件。
参考步骤如下:
(1)调用全屏幕编辑程序EDlT建立ASM文件。
C>EDIT
输入实验内容1的源程序并以SAMPLE.ASM为文件名将文件存盘。
(2)用汇编程序MASM对源文件SAMPLE.ASM汇编并产生目标文件SAMPLE.OBJ。
C>MASMSAMPLE
如汇编指示有错误,则需重新调用编辑程序修改程序中的错误,直至汇编通过为止。
(3)用连接程序LINK产生执行文件SAMPLE.EXE。
C>LINKSAMPLE
(4)执行程序。
可直接从DOS状态执行程序。
C>SAMPLE
显示器上显示出程序的运行结果。
Match.
4.也可以使用Debug调试运行这个.EXE文件,并查看运行结果。
对实验内容修改两个字符串的内容,使它们互不相同,再观察程序的运行结果。
5.写出实验报告。
实验四、循环程序设计
实验目的:
1.加深对循环程序的理解。
2.能构造出正确的循环结构并能实现较复杂的算法。
实验内容:
1.编制程序,要求如下:
从键盘接收一个四位的16进制数,在终端上显示与它等值的二进制数。
实验主要步骤:
1.根据要求,画出程序框图,写出汇编源代码。
参考程序如下:
Begin:
MOVBX,0;用于存放四位的16进制数
MOVCH,4
MOVCL,4
INPUT:
SHLBX,CL;将前面输入的数左移4位
MOVAH,1;从键盘取数
INT21H
CMPAL,30H;<0吗?
JBINPUT;不是"0~F"的数重新输入
CMPAL,39H;是"0~9"吗?
JAAF;不是,转"A~F"的处理
ANDAL,0FH;转换为:
0000B~1001B
JMPBINARY
AF:
ANDAL,11011111B;转换为大写字母
CMPAL,41H;又JBINPUT;不是"A~F"的数重新输入
CMPAL,46H;>F吗?
JAINPUT;不是"A~F"的数重新输入
ANDAL,0FH;转换为1010B~1111B
ADDAL,9
BINARY:
ORBL,AL;将键盘输入的数进行组合
DECCH
JNZINPUT
MOVCX,16;将16位二进制数一位位地转换成ASCII码显示
DISP:
MOVDL,0
ROLBX,1
RCLDL,1
ORDL,30H
MOVAH,2;进行显示
INT21H
LOOPDISP
STOP:
RET
2.上机编辑源程序,并汇编、连接、调试运行,查看结果。
3.写出实验报告。
实验五、分支程序设计
实验目的:
1.加深对分支程序的理解,掌握分支程序的结构。
熟悉运算类指令对标志位的状态影响以及标志位状态的表示方法;掌握条件转移、无条件转移指令的使用方法。
2.掌握分支程序设计、编写、调试和运行的方法。
实验内容:
1.试编写小程序:
对键盘输入的小写字母用大写字母显示出来。
参考程序段如下:
Begin:
MOVAH,1;从键盘输入一个字符
INT21H
CMPAL,'a';输入字符<'a'吗?
JBSTOP
CMPAL,'z';输入字符>'z'吗?
JASTOP
SUBAL,20H;转换为大写字母或ANDAL,11011111B也可以
MOVDL,AL;显示一个字符
MOVAH,2
INT21H
JMPBegin
STOP:
RET
2.编制程序统计学生成绩。
要求如下:
设有10个学生的成绩分别为56、69、84、82、73、88、99、63、100和80分。
试编制程序分别统计低于60分、60~69分、70~79分、80~89分、90~99分及100分的人数存放到s5、s6、s7、s8、s9及s10单元中。
这一题目的算法很简单,成绩分等部分采用分支结构,统计所有成绩则用循环结构完成。
实验主要步骤:
1.根据要求,画出程序框图如下图所示,然后写出汇编源代码。
开始
初始化计数单元
初始化循环计数值
初始化首地址
取一个成绩
Y
<60?
S5+1
N
Y
<70?
S6+1
N
Y
<80?
S7+1S7+1
N
Y
<90?
S8+1S8+1
N
N
=100?
S9+1
Y
S10+1
修改地址
N
循环结束?
Y
结束
程序框图
2.上机编辑源程序,并汇编、连接、调试运行,查看结果。
参考程序如下:
;PROGRAMTITLEGOESHERE――result
;************************************
datareasegment;definedatasegment
gradedw56,69,84,82,73,88,99,63,100,80
s5dw0
s6dw0
s7dw0
s8dw0
s9dw0
s10dw0
datareaends
;************************************
prognamsegment;definecodesegment
;----------------------------
mainprocfar;mainpartofprogram
assumecs:
prognam,ds:
datarea
start:
;startingexecutionaddress
;setupstackforreturn
pushds;saveolddatasegment
subax,ax;putzeroinAX
pushax;saveitonstack
;setDSregistertocurrentdatasegment
movax,datarea;datareasegmentaddr
movds,ax;intoDSregister
;MAINPARTOFPROGRAMGOESHERE
movs5,0;initializecounter
movs6,0
movs7,0
movs8,0
movs9,0
movs10,0
movcx,10;initializeloopcountvalue
movbx,offsetgrade;initializefirstaddr
compare:
movax,[bx];getaresult
cmpax,60;<60?
jlfive
cmpax,70;<70?
jlsix
cmpax,80;<80?
jlseven
cmpax,90;<90?
jleight
cmpax,100;=100?
jnenine
incs10
jmpshortchange-addr
nine:
incs9
jmpshortchange-addr
eight:
incs8
jmpshortchange-addr
seven:
incs7
jmpshortchange-addr
six:
incs6
jmpshortchange-addr
five:
incs5
change-addr:
addbx,2
loopcompare
ret;returntoDOS
mainendp;endofmainpartofprogram
;------------------------------
prognamends
;***************************
endstart;endassembly
3.写出实验报告。
实验六、子程序设计
实验目的:
1.掌握子程序设计方法,能合理划分子程序。
2.掌握汇编子程序的定义、调用、返回、参数传递等有关问题的实现,以及运行过程中的堆栈、标志位变化情况。
实验内容:
1.编写子程序嵌套结构的程序,把整数分别用二进制和八进制形式显示出来。
主程序BANDO:
把整数变量VAL1存入堆栈,并调用子程序PAIRS;
子程序PAIRS:
从堆栈中取出VAL1,调用二进制显示子程序OUTBIN,显示出与其等效的二进制数;输出8个空格;调用八进制显示子程序OUTOCT显示与其等效的八进制数;调用输出回车及换行符子程序。
实验主要步骤:
1.画出程序流程图,合理划分子程序,正确区分主程序与各子程序的功能与关系。
2.编制主程序与子程序的源代码。
参考程序如下:
DATASEGMENT
VAL1DW?
CRLFDW0DH,0AH,'$'
DATAENDS
CODESEGMENT
BANDOPROCFAR;主程序BANDO
ASSUMECS:
CODE,DS:
DATA
START:
PUSHDS;设置返回DOS
SUBAX,AX
PUSHAX
MOVAX,DATA
MOVDS,AX;给DS赋值
PUSHVAL1
CALLPAIRS
RET
BANDOENDP
PARISPROCNEAR;PARIS子程序
PUSHBP
MOVBP,SP
PUSHBX
MOVBX,[BP+4];从堆栈中取出VAL1
CALLOUTBIN;调用二进制显示子程序
MOVCX,8;显示8个空格
SPACE:
MOVDL,''
MOVAH,2
INT21H
LOOPSPACE
CALLOUTOCT;调用八进制显示子程序
CALLDISP_CRLF
POPBX
POPBP
RET2
PARISENDP
OUTBINPROCNEAR;二进制显示子程序
PUSHBX
MOVCX,16
ONEBIT:
ROLBX,1
MOVDX,BX
ANDDX,1
ORDL,30H;转换为ASCII码
MOVAH,2
INT21H
LOOPONEBIT
POPBX
RET
OUTBINENDP
OUTOCTPROCNEAR;八进制显示子程序
ROLBX,1;16位二进制数包含6位八进制数,最高位仅1位
MOVDX,BX
ANDDX,1
ORDL,30H;转换为ASCII码
MOVAH,2
INT21H
MOVCX,5;余下还有5位八进制数
NEXT:
PUSHCX
MOVCL,3;1位八进制数包含3位二进制数
ROLBX,CL
MOVDX,BX
ANDDX,07H
ORDL,30H;转换为ASCII码
MOVAH,2
INT21H
POPCX
LOOPNEXT
RET
OUTOCTENDP
DISP_CRLFPROCNEAR;显示回车换行子程序
LEADX,CRLF
MOVAH,09H
INT21H
RET
DISP_CRLF
CODEENDS
ENDSTART
3.上机编辑源文件,并汇编、连接、调试运行,随时查看堆栈的变化。
4.编写实验报告。
实验七、I/O程序设计
实验目的:
1.熟悉BIOS、DOS中断调用情况,学会如何利用系统功能控制外设的I/O操作
实验内容:
1.分别利用BIOS、DOS中断服务,编程实现对键盘、显示器等的控制。
2.实验编程:
在AX中存放着压缩BCD的十进制数,编程实现把AX中的四位十进制数按照从高位到低位的顺序在屏幕上显示出来(例如若AX=0010001101000101B,则在屏幕上显示“2345”)。
实验主要步骤:
1.根据要求编写汇编源代码,核心代码参考如下:
MOVBX,AX
MOVCL,4
SHRAH,CL
ADDAH,30H
MOVDL,AH
MOVAH,2
INT21H‘显示“2”
MOVAH,BH
ANDAH,0FH
ADDAH,30H
MOVDL,AH
MOVAH,2
INT21H‘显示“3”
MOVAL,BL
MOVCL,4
SHRAL,CL
ADDAL,30H
MOVDL,AL
MOVAH,2
INT21H‘显示“4”
MOVAL,BL
ANDAL,0FH
ADDAL,30H
MOVDL,AL
MOVAH,2
NT21H‘显示“5”
2.上机编辑源文件,汇编、连接、调试运行,查看结果。
3.编写实验报告。