《汇编语言程序设计》实验教学大纲课程号: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],AXCS: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‘12345678904.写出实验报告。实验二、熟悉指令系统实验目的: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寄存器。参考程序代码如下:DATASEGMENTXDW1200HYDW0034HZDW0F045HWDW034AHDATAENDSCODESEGMENTASSUMECS:CODE,DS:DATASTART:MOVAX,XIMULYMOVCX,AXMOVBX,DXMOVAX,ZCWDADDCX,AXADCBX,DXSUBCX,540SBBBX,0MOVAX,WCWDSUBAX,CXSBBDX,BXIDIVXMOVAH,4CHINT21HCODEENDSENDSTART2.可以在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.根据要求编制汇编源程序。参考程序如下:DATASEGMENTSTRINGlDB‘Movethecursorbackward.’STRING2DB‘Movethecursorbackward.’MESSlDB‘Match.’,13,10,‘$’MESS2DB‘NOMatch!’,13,10,‘$’DATAENDSPROGSEGMENTASSUMECS:PROG,DS:DATA,ES:DATASTART:MOVAX,DATAMOVDS,AXMOVES,AXLEASI,STRINGlLEADI,STRING2CLDMOVCX,25REPZCMPSBJZMATCHLEADX,MESS2JMPSHORTDISPMATCH:LEADX,MESSlDISP:MOVAH,091NT21HMOVAH,4CHINT21HPROGENDSENDSTART2.使用记事本或其它字处理软件(Edit.exe)编辑该源文件。3.使用Masm、Link程序汇编、连接该文件,形成可执行的.EXE文件。参考步骤如下:(1)调用全屏幕编辑程序EDlT建立ASM文件。CEDIT输入实验内容1的源程序并以SAMPLE.ASM为文件名将文件存盘。(2)用汇编程序MASM对源文件SAMPLE.ASM汇编并产生目标文件SAMPLE.OBJ。CMASMSAMPLE如汇编指示有错误,则需重新调用编辑程序修改程序中的错误,直至汇编通过为止。(3)用连接程序LINK产生执行文件SAMPLE.EXE。CLINKSAMPLE(4)执行程序。可直接从DOS状态执行程序。CSAMPLE显示器上显示出程序的运行结果。Match.4.也可以使用Debug调试运行这个.EXE文件,并查看运行结果。对实验内容修改两个字符串的内容,使它们互不相同,再观察程序的运行结果。5.写出实验报告。实验四、循环程序设计实验目的:1.加深对循环程序的理解。2.能构造出正确的循环结构并能实现较复杂的算法。实验内容:1.编制程序,要求如下:从键盘接收一个四位的16进制数,在终端上显示与它等值的二进制数。实验主要步骤:1.根据要求,画出程序框图,写出汇编源代码。参考程序如下:Begin:MOVBX,0;用于存放四位的16进制数MOVCH,4MOVCL,4INPUT:SHLBX,CL;将前面输入的数左移4位MOVAH,1;从键盘取数INT21HCMPAL,30H;0吗?JBINPUT;不是0~F的数重新输入CMPAL,39H;是0~9吗?JAAF;不是,转A~F的处理ANDAL,0FH;转换为:0000B~1001BJMPBINARYAF:ANDAL,11011111B;转换为大写字母CMPAL,41H;又A吗?JBINPUT;不是A~F的数重新输入CMPAL,46H;F吗?JAINPUT;不是A~F的数重新输入ANDAL,0FH;转换为1010B~1111BADDAL,9BINARY:ORBL,AL;将键盘输入的数进行组合DECCHJNZINPUTMOVCX,16;将16位二进制数一位位地转换成ASCII码显示DISP:MOVDL,0ROLBX,1RCLDL,1ORDL,30HMOVAH,2;进行显示INT21HLOOPDISPSTOP:RET2.上机编辑源程序,并汇编、连接、调试运行,查看结果。3.写出实验报告。实验五、分支程序设计实验目的:1.加深对分支程序的理解,掌握分支程序的结构。熟悉运算类指令对标志位的状态影响以及标志位状态的表示方法;掌握条件转移、无条件转移指令的使用方法。2.掌握分支程序设计、编写、调试和运行的方法。实验内容:1.试编写小程序:对键盘输入的小写字母用大写字母显示出来。参考程序段如下:Begin:MOVAH,1;从键盘输入一个字符INT21HCMPAL,'a';输入字符'a'吗?JBSTOPCMPAL,'z';输入字符'z'吗?JASTOPSUBAL,20H;转换为大写字母或ANDAL,11011111B也可以MOVDL,AL;显示一个字符MOVAH,2INT21HJMPBeginSTOP:RET2.编制程序统计学生成绩。要求如下:设有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.根据要求,画出程序框图如下图所示,然后写出汇编源代码。开始初始化计数单元初始化循环计数值初始化首地址取一个成绩Y60?NY70?NY80?NY90?NN=100?Y修改地址N循环结束?Y结束程序框图2.上机编辑源程序,并汇编、连接、调试运行,查看结果。参考程序如下:;PROGRAMTITLEGOESHERE――result;************************************datareasegment;definedatasegmentS10+1S9+1S8+1S8+1S7+1S7+1S6+1S5+1gradedw56,69,84,82,73,88,99,63,100,80s5dw0s6dw0s7dw0s8dw0s9dw0s10dw0datareae