佛山科学技术学院实验报告课程名称汇编语言实验项目分支程序设计专业班级11计算机科学与技术1姓名林胜冰学号2011314117指导教师杨定安成绩日期一、实验目的通过上机编程,熟悉利用汇编语言设计不同种类分支程序的方法,掌握汇编语言中实现分支程序的相关汇编指令。二、实验仪器微机一台,U盘一块。三、实验原理在实际问题中,需要对不同情况做不同的处理,这就需要使用到分支结构。汇编语言中的分支程序是利用条件转移指令或者跳转表,使程序在执行到某条指令后,根据运行结果是否满足一定条件来改变程序执行的顺序,然后执行不同的条件下对应的指令。如果进行的是逻辑分支,可以用每次分两支的方法来达到程序多分支的目的。一般而言,分支程序的结构通常有三种形式:不完全分支、完全分支和多分支,如图所示:在本实验中,我们以求解一组无符号字节序列中的最大值和最小值的问题进行讲解分支程序的设计和实现。最终结果是序列中的最大数和最小数,我们可以将寄存器BX的高位和低位分别用于存放最大数和最小数,然后,将序列中的两个数存入其中,再将序列中的其他数分别与BH和BL中的数进行比较,如果大于BH或者小于BL,则将寄存器中的数用当前取出的数进行替换,完全比较之后,BH和BL中数即为整个序列中的最大数和最小数。四、实验步骤本实验重点算法的理解以及相关指令的灵活应用。(1)分析问题,设计算法。(2)根据上述算法,编制程序流程图,如图4-1所示。图4-1程序流程图(3)根据流程图,编写实现代码;(4)程序汇编为目标文件.obj。(5)目标文件.obj链接为可执行文件.exe。(6)使用Debug调试运行程序,设置断点,查询相关寄存器内容,调试直至得到正确的结果。(7)根据实验过程和实验结果完成实验报告,并按时上交。注意:在程序设计中,注意相关的寄存器的用途,如CX的作用,SI的作用,以及汇编语言中,一个寄存器的高低位可以分开使用的特点。五、实验预习要求预习相关的汇编语言指令,着重是理解相关寄存器的特定用途,如:SI、CX等,以及寄存器的高低位可以分开使用的特点。学校印刷的标准报告纸写实验报告。六、实验原始代码datasegmentAdw32,85,16,15,8dataendscodesegmentassumecs:code,ds:datastart:movax,datamovds,axmovcx,5deccxloop1:movdi,cxmovbx,0loop2:movax,A[bx]cmpax,A[bx+2]jlecontinuexchgax,A[bx+2]movA[bx],axcontinue:addbx,2looploop2movcx,dilooploop1movax,4c00hint21hcodeendsendstart七、实验过程记录1.用r命令查看2.用U反汇编3.用t单步调试Cx自减1,进行第一次循环4.初始化BX5.比较AX和[BX+2],即比较相邻2个数的大小,若AX大于[BX+2],则交换2个数的位置,若AX小于[BX+2],则比较下一个数6.32小于85,比较下一个数7.BX+2比较下一个数8.进行的第2次循环,比较下一个数,因为85大于16,所以进行交换9.用d命令查看内存中的数据,可以看到85和16的位置已经交换10.依次调试,查看内存中的结果85和15比较,两者交换位置:85和8比较,交换位置:11.第一次内层循环结束,进行外层循环(内层循环、外层循环各进行4次)12.按照如上步骤依次进行调试,得到每次外层循环各次调试结果。第二次外层循环第三次外层循环第四次外层循环13.程序结尾,int21H,使用p命令,程序结束八、实验体会1.通过课程设计的编程和对编程过程中遇到的问题的思考,有效的提高了我对汇编的认识和理解,切实的提高了我的编程能力,补全了我的不足。2.通过这次课程设计,我巩固所了学过的知识,能用汇编语言熟练地运用顺序、选择、循环、分支、子程序等结构,进一步掌握了各个指令的功能,特别是转向指令,掌握了子程序的定义及调用,以及正确地运用DEBUG指令。3.在整个程序的编写中,调试占了很大部分的时间。要想写好汇编语言的程序,必须认真对待代码的每一个细节,还必须熟练的掌握debug命令,这对程序的调试是非常重要的。通过这次实际动手能力的培养,我进一步熟悉了汇编语言的结构和使用方法,基本达到了能独立阅读和调试一定规模的汇编语言程序的水平。