昆明理工大学信息工程与自动化学院学生实验报告(2011—2012学年第1学期)课程名称:汇编语言程序设计开课实验室:2011年11月28日年级、专业、班计科094学号200910405425姓名汪豪成绩实验项目名称分支程序设计指导教师万小容教师评语教师签名:年月日一、实验目的:1、熟悉汇编语言程序设计的开发环境、格式以及汇编过程。2、熟练掌握Debug命令的U命令、D命令、R命令、G命令、T命令、Q命令等。3、掌握分支程序的设计方法。4、输入并汇编折半查找程序。二、实验原理及基本线路图:1、实模式下的汇编语言实践环境基于DOS平台,当汇编语言编好后,若要是它完成其功能,还需经过建立、汇编、连接等过程,如果出现错误还要进行跟踪调试。对于.EXE和.COM的上机过程略有不同,本次实验以汇编.EXE文件为例。2、.EXE的上机过程:A、建立并编写汇编程序,后缀名为.ASMB、汇编语言程序,生成目标程序,同时检查用户汇编程序中的错误且显示信息,对宏指令进行扩展,把源程序翻译成机器语言的目标代码等。C、链接汇编好的目标程序,产生目标模块,解决外部交叉调用,产生一个可重定位的装入模块等。D、通过链接后可运行.EXE文件,并观察运行结果。E、若程序得不到预期结果可通过DEBUG程序进行调试。3、DEBUG中才常用命令的使用方法:A、用R命令显示寄存器的内容。B、用U命令反汇编可执行代码。C、用D命令查看数据。D、用G命令执行正在被调用的程序到断点处。E、用T命令可以逐条跟踪执行程序。F、用Q命令退出DEBUG环境,返回到操作系统。4、DOS装入.EXE文件的过程:A、DOS的装入程序先为.EXE程序建立一个256B的程序段前缀PSP,PSP中包含可被用户使用的的DOS入口、DOS为自己所存储的信息、由DOS传递给用户程序的信息等。其中PSP:0处存放一条INT20H指令。B、把文件头读入内存工作区。C、计算可执行模块的大小。D、计算装入的起始段地址。E、完成重定位。F、初始化段寄存器和指针寄存器。G、把控制权交给.EXE程序。装入程序对段和指针寄存器的设置为CS:IP为主程序入口地址。SS为堆栈段的段基址,SP指向栈顶。其它段寄存器全部被初始化为指向PSP的段基址,以便用户能够访问PSP中的信息。5、分支程序:分支程序概括起来有两种,如果分支较少可使用IF-THEN-ELSE结构,先判断执行条件,如果满足则用跳转指令执行相应的操作,否则退出。如果分支较多,使用IF-THEN-ELSE结构就显得工作量很大,可使用CASE结构实现,首先建立跳转表,然后用无条件转移指令实现跳转。6、折半查找:算法思想是将数列按有序化(递增或递减)排列,查找过程中采用跳跃式方式查找,即先以有序数列的中点位置为比较对象,如果要找的元素值小于该中点元素,则将待查序列缩小为左半部分,否则为右半部分。通过一次比较,将查找区间缩小一半。折半查找是一种高效的查找方法。它可以明显减少比较次数,提高查找效率。但是,折半查找的先决条件是查找表中的数据元素必须有序。流程图:l=0,h=n-1lh?M=(a+h)/2否R[m]=a?是查找失败l=m+1h=m-1查找成功三、实验仪器、平台:PC机、WINDOWSXP系统四、实验步骤:1、首先配置MASM5.0的环境变量,在设置其PATH变量为其安装路径,配置完成后进入DOS界面,在其文件路径下输入asm,如不提示错误信息则表示配置成功,否则重新配置。2、打开记事本,编写汇编程序,完成后保存为01.ASM的文件格式。将文件放到MASM的安装路径(E:\asm)下,准备开始汇编。3、打开DOS界面,将当前目录设置为MASM5.0所在目录:E:\asm4、用MASM汇编源程序,指令格式为:MASM文件名.ASM5、汇编完成后用LINK命令链接生成可执行的目标木块。指令格式为LINK文件名.OBJ6、链接完成后生成一个.EXE类型的文件,通过DEBUG命令对该文件进行调试。五、实验过程原始记录:1、二分查找汇编源程序:STACKSGSEGMENTSTACK'S'DW64DUP('ST')STACKSGENDSDATASEGMENTBUFDB30H,31H,32H,33H,34H,35H,36H,37H,38H,39H,41H,42H,43H,44H,45HCOUNTEQU$-BUFCHARDB?MARKDW0PROMPTDB'NOFOUND$'DATAENDSCODESEGMENTASSUMECS:CODE,DS:DATA,SS:STACKSGMAINPROCFARMOVAX,DATAMOVDS,AXMOVAH,1INT21HMOVCHAR,ALLEASI,BUFMOVCX,COUNTMOVDX,SIADDDX,CXMOVDI,DXMOVDX,0CMPAL,[SI]JBNOFIDJEFOUNDCMPAL,[DI-1]JANOFIDJEFOUNDMOVDX,1MOVAL,CHARC1:MOVBX,SIADDBX,DISHRBX,1CMPAL,[BX]JZFOUNDPUSHFCMPBX,SIJZNOFIDPOPFJLLESSMOVSI,BXJMPSHORTNEXTLESS:MOVDI,BXNEXT:INCDXJMPC1NOFID:LEADX,PROMPTMOVAH,9INT21HJMPSHORTEXITFOUND:MOVMARK,DXPUSHDXMOVAH,2MOVDL,[BX]INT21HMOVCL,10POPAXDIVCLORAX,3030HMOVDL,ALPUSHAXMOVAH,2INT21HPOPAXMOVDL,AHMOVAH,2INT21HEXIT:MOVAX,4C00HINT21HMAINENDPCODEENDSENDMAIN2、将名为wh.asm的汇编程序放到MASM的安装路径下准备汇编:用MASM程序汇编wh.asm,并生成一个目标文件。3、链接.OBJ文件,生成.EXE文件:用DEBUG命令调试生成的可执行文件:用R命令显示寄存器内容:用U命令反汇编可执行代码:用G命令执行正在被调试的程序执行到断点处:(执行到000C处,并用R命令和U命令查看寄存器并生成反汇编代码。)用D命令查看数据:(D命令可显示所以寄存器的所有数据,用D命令指定要查看的地址和数据长度,可单独显示所需要查看的数据。)用T命令跟踪执行程序:六、实验结果、分析和结论:本次实验让我了解了汇编程序的载入和从生成目标文件到执行程序的步骤和方法,熟悉了DOS下的几个常用命令,以及DEBUG下如何调试程序的方法。但对于计算机分配的地址和寄存器储存的数据感觉很困难,使得整个汇编程序跟踪起来很吃力,必须用心在计算之后才能得到跳转之后的数据。