




免费预览已结束,剩余3页可下载查看
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
微机原理课程设计说明书题目数据段里有一个N个字的数组A,利用冒泡排序法最数组进行从小到大的排序,并输出结果。要求:读出数据段中存放的数组A;换行显示换行后的数组A题目分析数据段为N个字,从而了解到该数据类型为双字节,且数据段中数据个数未知。要求对该数组进行从小到大的排序,且要求用冒泡法进行。数据段中的数组A已经给定,无需输入,但是要求将排序前后数组A显示出来,且要求换行显示。软件流程图YYNNII+1计数2计数2-1计数2=0?计数2计数2-1计数2=0?结束交换AA(I)和AA(I+1)NYAA(I) 和AA(I+1)I0计数2计数1开始计数1N-1流程图设计思路说明首先通过调用自定义子程序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,len dec cx mov flag,0l_in: mov dx,bx;内层循环,若元素间逆序,置flag为1 cmp dx,bx+2 jl next mov dx,bx xchg dx,bx+2 mov bx,dx mov flag,1next: add bx,2 loop l_in test flag,0ffh jnz l_out call print mov ax,4c00h int 21h自定义显示子程序printfprint proc near push bx;将各寄存器其中的数据进行压栈 push cx push ax lea bx,arrary mov cx,lenp1: push cx mov ax,bx cmp ax,0;判断是否为有符号或无符号数 jge p2;正数部分输出 push ax mov dl,- mov ah,2 int 21h pop ax neg axp2: xor cx,cxp3: xor dx,dx div c10 push dx inc cx test ax,0ffh jnz p3;分离各位数据p4: pop dx 调用系统(BIOS)中断单字符输出功能 or dl,30h mov ah,2 int 21h loop p4;输出下一位 mov dl, mov ah,2 int 21h add bx,2 pop cx loop p1;处理下一数据 mov dl,0ah;换行 mov ah,2 int 21h mov dl,0dh mov ah,2 int 21h pop ax;弹出暂时保存的数据 pop cx pop 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为数据One:mov ah,0 Div c10;c10定义其值为10 Push ax Loop one但显然问题又来了,数组A中元素的位数也是未知的,x该取何值?又经过仔细思考之后巧妙地设置了一个检测环节,每次分离完之后检测当商和余数同时为零是停止分离。从而完美的解决了显示多位数的问题。心得体会通过这次程序设计,使我对汇编语言的基本知识的使用更加熟练,同时也增加了我对汇编语言的一些认识,在作业完成过程中通过和同学的交流,也增加了合作的技巧。通过查阅资料也学到了一些课本上没有的东西,拓宽了自己的知识面,增加了学好汇编语言的信心。 这不是第一次用汇编语言来设计一个小程序,平时做了很多实验,写了很多小程序。但这次是一个综合的程序,平时的很多程序都用到了。很多子程序的设计是固定的,因此可以直接从指导资料中调用,大多只需要修改几个参数就可以,这大大方便了我们的设计,为我们节省了很多的时间。 在这次课程设计中,我真正体会到了合作的重要性,遇到很多问题时,当我看书查资料不能解决时,这是去找同学讨论一下,收获很大,可以使很多问题迎刃而解,直到问题最终解决。 不可否认,本程序存在不少缺点和不足,但通过这次课程设计的却找出了自己在学习上的不足,对以后的工作也有指导作用。我相信在以后的学习中会克服这些不足,达到熟练掌握汇编语言的目的!发现这次程序设计之后,我已经喜欢上了编程。无论以是汇编还是其他高级编程语言。我想有了掌握一门编程语言的方法,其他的也不是难题。参考文献A. 数字电子与微型计算
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 教育行业市场占有率表
- 美丽的心绪:初中语文作文教学与评价教案
- 外语课堂中的小组互动与合作学习效果研究
- 新能源领域发展动态表
- 小学生阅读理解能力的提升方法
- 各地区产业园区建设情况表格
- DB14-T 3387-2025 边鸡保种技术规程
- 家乡的变化发展议论文主题作文(8篇)
- 高空与低空交通融合对消费模式的创新
- 农业经济管理体系建设协议
- 隔爆设施安撤安全操作规程模版(2篇)
- 2025届高考语文一轮复习:小说阅读测试卷一(含解析)
- 急性肺栓塞急救与护理
- DB51-T 2987-2022 企业温室气体排放管理规范
- 2024年环保知识竞赛试题库及答案(完整版)
- 《数字信号处理原理与实现(第3版)》全套教学课件
- 广西河池市2023-2024学年高一下学期7月期末考试英语
- 中建“大商务”管理实施方案
- 电气识图全套试题及答案
- 安康杯安全知识竞赛考试题含答案
- 教科版五年级科学下册全册知识点
评论
0/150
提交评论