文档详情

微机原理冒泡排序讨论课报告.docx

发布:2017-02-03约3.4千字共6页下载文档
文本预览下载声明
讨论课报告学校:上海电机学院 班级:电子1313 学号:131003430326 姓名:吴限一、题目:在内存中以BUF为首地址存放着一个无序排列的无符号数组,这个无符号数组存放的是某次考试的学生成绩,要求对这个无符号数组按降序排序。二、程序设计1.程序采用多重循环程序结构实现冒泡排序算法,表述编程思路(流程图)。内循环实现什么功能?外循环实现什么功能?分析说明编程思路:先定义数据段,把数据存入BUF中,然后根据BUF中数据量的多少放入COUNT中来确定外循环次数。再开始主程序,在主程序中对COUNT进行减一来完成内循环,比较相邻两数的大小,通过JNA来看标志位是否为1,若为1则不交换,否则交换并设置一个标记位。标记位若为0则退出循环,否则进行下次循环。流程图见附件。功能:外循环来控制循环次数,内循环实现数据比较交换,内循环执行一次(CX)-1→CX,循环次数根据数据的量决定。2.源程序安排几个段结构?分析说明。由上述编程思路源程序安排3个段结构,分别是代码段,数据段,堆栈段。数据段:通常是指用来存放程序中已初始化的全局变量的一块内存区域。数据段属于静态内存分配。此程序中数据段以BUF为首地址在DB中存放了要排序的数据表,并将数据个数放入COUNT中作为外循环次数。代码段:通常是指用来存放程序执行代码的一块内存区域。此程序中代码段包含了所有实现算法的指令性及指示性语句,实现了数据的循环排序功能。堆栈段:通常是指采用堆栈方式工作的一段内存区域。用来存放局部变量和函数返回地址。源程序中堆栈段用于在调用子程序时保存返回地址;进入子程序后保留通用寄存器的值,子程序执行完毕返回时恢复寄存器的值,并分别将返回地址恢复到指令指针寄存器中。3.采用哪些语句实现多重循环?循环次数如何设定?实现多重循环可采用循环语句嵌套使用实现,实现循环功能的语句有:采用CX计数:LOOP(CX不为0循环)、LOOPE(结果为0循环)、LOOPNE(不为0循环)、JCXZ(CX的值为0转移),每次循环一次CX自减1直到为0跳出循环。2.不采用CX计数:可采用 CMP XX,XX JX Target 用DX或其他寄存器储存循环次数,循环一次寄存器的值自减1,通过与0进行比较判断循环是否结束。其中CMP实现比较改变标志寄存器的值,JX根据标志的状态来决定是否发生控制转移,条件转移语句转到上一个语句段实现循环。转移语句可以用:JE/JZ,JA/JBE,JG/JNLE等。在循环程序体内再嵌套循环,则程序就变成了多重循环程序结构。循环次数根据需要排序的数据个数来设定(COUNT EQU $-BUF),每当循环一次就减一,直到为0时就退出循环。4.用到哪些寄存器?如何完成数据交换?分析说明。段寄存器:CS、DS存段地址用于定位段的位置,通用寄存器:AX ,BX,CX,DX,SI暂存数据和指针。数据交换:将外循环的比较次数赋值给CX作为内循环比较次数,然后将数据的首地址给指针寄存器SI,将SI所指地址中的数据放入AL中,CMP比较AL中的数与SI+1中数的大小,通过JNA来看标志位是否为1,若为1则不交换,否则交换。若交换则交换后将CX减1进行下次循环,若不交换则直接进行下次循环。循环比较过程中要设置一个标志BL,并在每次比较前,先将标志置0,如果比较过程中实现两个数交换将标志数置1,若比较后标志还是为0,说明排序已经排好,将程序结束,可以优化程序。三、讨论小结通过此次讨论课,在与大家的交流讨论中对循环结构的总体框架有了清晰的认识,对几种排序方法都有了简单的了解,其中冒泡排序法进行了详细的认识,已经掌握了用冒泡法对数据的排序,包括各种排序算法的基本思路及不足还有对其进行改进的方法。对于汇编语言下冒泡排序算法的的编写有了充分了解,在编写程序的方法上有了很好的掌握,如在子函数定义调用上有了清晰认识方便运用参数传递方便地被其他函数调用。通过这次讨论课也对所学的知识进行了巩固和加深了解,对一些语句的使用,寄存器的应用等都有了正确的认识。对8086指令系统及汇编语言指令进行了巩固为,后续的学习打下基础。思考题:程序可以采用子程序结构来实现冒泡排序算法么?子程序结构实现什么功能?分析说明。可以。子函数与主函数在同一代码段,子函数采用段内调用。定义排序子函数,其中函数要排序的数组排序完成后仍放在原存储区域,其中数组元素个数COUNT($-BUF)送DX。子函数入口参数:BUF、COUNT-1→DX出口参数:BUF数据区主程序用CALL指令来调用子程序。过程执行完毕后返回主程序时,靠过程体最后的RET指令的执行返回。子函数定义完成在主函数中调用子函数:1.参数准备:MOV DX,COUNT-1准备好入口参数2.CALL SORTP 调用排序子函数MOV AH,4CH 调用完成
显示全部
相似文档