微机原理课程设计说明方案.docx

  1. 1、本文档共8页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
微机原理课程设计说明书题目数据段里有一个N个字的数组A,利用冒泡排序法最数组进行从小到大的排序,并输出结果。要求:读出数据段中存放的数组A;换行显示换行后的数组A题目分析数据段为N个字,从而了解到该数据类型为双字节,且数据段中数据个数未知。要求对该数组进行从小到大的排序,且要求用冒泡法进行。数据段中的数组A已经给定,无需输入,但是要求将排序前后数组A显示出来,且要求换行显示。软件流程图流程图设计思路说明首先通过调用自定义子程序printf将数组A中的数据显示出来,然后在运用冒泡法对数组中的数据进行排序,冒泡法排序的总思路是,首先从数组A中的第一个元素开始,一次对相邻的的两个元素进行比较,调整。使前一个元素不大于后一个元素,将素有元素比较完之后,最大的元素排到了最后;然后,除掉最后一个元素之外的元素依上方法再次进行比较,得到次大的元素排在后面;如此重复,直至完成就实现了元素的从小到大的排序。同时在每一轮的依次比较时,我还设置了一个检测标识,如果哪一轮比较时没有进行依次调整,前面的元素都不大于后面的元素。直接结束排序。最后再次调用自定义子程序printf将排序后的数组A显示出来。程序清单主程序开始部分DATAS SEGMENT arrary dw 3,2,-1,5,7,4,6,100,895;预定义需排序数组 len dw ($-arrary)/2 flag db ?;交换标志,为1表示发生交换 c10 dw 10 ;此处输入数据段代码 DATAS ENDSSTACKS SEGMENT ;此处输入堆栈段代码STACKS ENDSCODES SEGMENT ASSUME CS:CODES,DS:DATAS,SS:STACKSSTART: MOV AX,DATAS MOV DS,AX call print;调用子程序打印数组冒泡法排序程序l_out:lea bx,arrary;外层循环,flag==1时进入mov cx,lendec cxmov flag,0l_in: mov dx,[bx];内层循环,若元素间逆序,置flag为1cmp dx,[bx+2] jl nextmov dx,[bx]xchg dx,[bx+2]mov [bx],dxmov flag,1next: add bx,2 loop l_in test flag,0ffh jnz l_out call printmov ax,4c00h int 21h自定义显示子程序printfprint proc nearpush bx;将各寄存器其中的数据进行压栈push cxpush axlea bx,arrarymov cx,lenp1: push cxmov ax,[bx]cmp ax,0;判断是否为有符号或无符号数 jge p2;正数部分输出push axmov dl,-mov ah,2 int 21hpop axneg axp2: xor cx,cxp3: xor dx,dxdiv c10push dxinc cx test ax,0ffh jnz p3;分离各位数据p4: pop dx调用系统(BIOS)中断单字符输出功能or dl,30hmov ah,2 int 21h loop p4;输出下一位mov dl, mov ah,2 int 21hadd bx,2pop cx loop p1;处理下一数据mov dl,0ah;换行mov ah,2 int 21hmov dl,0dhmov ah,2 int 21hpop ax;弹出暂时保存的数据pop cxpop bx retprint endp主程序结束部分 MOV AH,4CH INT 21HCODES ENDS END START设计总结冒泡法因为以前学过C语言接触过,所以程序设计在这一块比较顺利,但到了显示数组的时候遇到了障碍。mov dl,待输出字符的ASCII码mov ah,2 int 21h由于没有注意到DL 中转移的数据应该是待输出字符的ASCII码,所以刚开始没有将数组住的元素转换成其相应的ASCII码,所以显示出错,除此之外由于该系统中断的功能只是输出单字符,但是数组A中的数据各种各样,所以当数组A中的数据不是单字符是就不能正常的显示,经过思考,联想到以前在学习C语言时候分离过一个三位数的百位,十位和个位。当即有了想法,我同样可以将数组A中的元素各位进行分离。所以写了一段程序Mov cx ,n;n为循环次数,即数据的位数Mov al,x;x为数

文档评论(0)

xingyuxiaxiang + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档