- 1、本文档共37页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
[工学]第11讲 程序设计方法二
项目:排序 项目要求与目的 (1)项目要求:编写程序实现:在数据段中,有一个无序排列的无符号数组,这无符号数组存放的就是某次考试的学生成绩,其首地址存放在SI寄存器中,数组中的第一个单元存放着数组长度,即考试考生人数。要求对这个无符号数组按降序排序,当然数组的第一个单元存放的仍然为数组长度。 (2)项目目的:学习汇编的子程序结构和模块化程序设计方法。 四、子程序结构 五、综合举例 项目:排序 项目要求与目的 (1)项目要求:编写程序实现:在数据段中,有一个无序排列的无符号数组,这无符号数组存放的就是某次考试的学生成绩,其首地址存放在SI寄存器中,数组中的第一个单元存放着数组长度,即考试考生人数。要求对这个无符号数组按降序排序,当然数组的第一个单元存放的仍然为数组长度。 (2)项目目的:学习汇编的子程序结构和模块化程序设计方法。 2.项目程序设计 (1)程序流程图 设计思想:对于这个排序问题,我们可以采用基本排序算法(如冒泡排序,简单选择排序,插入排序等),也可以采用高级排序算法(如堆排序,归并排序,快速排序等)。当然基本排序程序简单,效率不高。而高级排序程序复杂,效率高。本项目为了使程序简单,采用基本排序的冒泡排序。 简单选择排序的基本思想:对文件进行n-1趟排序,第i趟(i=1,2,...n-1)是在从i到 n的n-i+1个记录中选择关键字最小(最大)的记录,并将它与第i个记录进行交换。 这里采用子程序结构,整个程序包括一个主程序和两个子程序,程序流程图如图所示。这两个子程序是: ① XZPX:功能是对数组元素进行降序排序。 入口参数:采用寄存器SI传递参数。 出口参数:无。 ② DISPLAY:功能是将数组元素输出在屏幕上显示。 入口参数:采用寄存器SI传递参数。 出口参数:无。 程序清单 调用DISPLAY 开始 结束 调用XZPXF 调用DISPLAY (a) 主程序 寄存器入栈(保护现场) 子程序开始 子程序结束 寄存器出栈(恢复现场) mov si,dx mov di,si mov al,[bx+si] si++ cmp al,[bx+si] al[bx+si]? Y N 子程序初始化 inc si mov al,[bx+si] mov di,si Sicx? N Y xchg [bx+di],al inc dx dxcx? mov si,dx xchg [bx+si],al Y N (b) XZPX子程序 子程序初始化 子程序开始 子程序结束 送将要显示的字符到DL 恢复现场 (c)DISPLAY子程序 DOS系统功能调用 修改指针地址 循环结束? Y N 保护现场 程序流程图 DX*10=(DX*4+DX)*2 DX的初值放在BX中,调用CHE时需要将使用到的BX寄存器保存起来,结果放入DX中。 两数相加子程序:通过内存传递参数 入口参数:SI 出口参数:SUM 两数相加子程序内嵌显示子程序 结果放在内存的SUM单元中 为何SP要定义为50? SP=200 显示子程序: 输入参数:SUM 寄存器:BX(和),CX(移位次数),AL(显示的数据),AH(功能号2) 递归调用 N=0,N!=1 否则 N!=N*(N-1)! * * §4-4 程序设计方法——子程序结构 1.子程序使用: 子程序: 将多次使用的程序段写成一个相对独立的程序段,称为子程序或过程。 子程序结构的定义: 使用过程定义语句PROC…ENDP。 属性: 调用程序和过程在同一代码段中,则用NEAR属性; 调用程序和过程不在同一代码段中,使用FAR属性。 主过程定义为FAR属性,看作DOS调用的一个子过程。 子程序说明: ⑴功能描述:名称,功能及性能 ⑵寄存器,存储单元 ⑶入口参数,出口参数 ⑷调用其它子程序的名称 §4-4 程序设计方法——子程序结构 例12 有一个子程序说明如下: ;名称:BCD2BIN ;功能:将一个字节的BCD码转换成二进制数 ;所用寄存器:CX ;入口参数:AL存放两位BCD码 ;出口参数:AL存放二进制数 ;调其它子程序:无 子程序形式如下; §4-4 程序设计方法——子程序结构 BCD2BIN PROC NEAR(或FAR) PUSH CX MOV CH, AL AND CH, 0FH ;存低4位 MOV CL, 4 SHR AL, CL ;高4位右移4位后乘10 MOV CL, 1
文档评论(0)