微机原理与接口技术实验——冒泡法
更新时间:2023-05-04 21:17:01 阅读量: 实用文档 文档下载
'、实验内容
用“冒泡“法对一组数300, 250, 280, 240, 260,按从小到大的顺序排列
提示:
用冒泡的方法对一组数据元素排序,它的基本方法是:
将相邻的两个元素通过比较进行排序,通过多次,多遍的邻元素排序,实现整个一组数的排 序。
对于5 ( N )个元素,整个排序通过4遍(=N-1 )邻元素排序完成。每一遍的排序由若干次 邻元素的排序组成。
4遍排序中,邻元素的排序依次为 4, 3, 2, 1遍。完成第一遍排序后,最大数沉底,已经 到达它应占据的位置,不需要参加下一遍的排序。
外循环的次数为CX=4次(N-1),内循环的次数为4,3,2,1(DECCX )
排序遍数本遍排序前第一次排序第二次排序第三次排序第四次 后后后后 240, 260240, 260240, 260300, 260260J 300
欠排序
1300, 250, 280, 250, 300, 280, 250, 280, 300, 250,280, 240, 250, 280
240, 2250, 280, 3250, 240, 260, 300260, 260, 250, 280、240, 250, 240, 300260, 30C280, 300
280, 250, 240, 260,
4240, 250, 280, 300280, 260, 250, 240, 260, 240, 250, 300280, 300
260,
240, 250, 260,
280, 300280, 300
实验要求:
1. 编制程序,对这组数进行排序,并输出原数据及排序后数据;
2. 利用DEBU调试工具,用D0(是D零命令)命令,查看排序前后,内存数据的变化;
3. 去掉最大和最小的两个值,求出其余值的平均值,并输出最大值,最小值和平均值;
4. 用学过的压栈PUSH和出栈POF指令,将平均值按位逐个输出(即输出263);
5将平均值263转化为二进制串,并将这组二进制串输出。
6.所有数据输出前要用字符串的输出指令,进行输出提示(如:zuidazhishi:300 等),所有数据结果能清晰地显示在屏幕上。
二、程序清单及流程图
冒泡法:
DATASEGMEI定义数据段
VARDW300,250,280,240,260;定义待排序的量
NEQU$-VA占内存空间的大小,是次数的两倍;因为这是字定义
EJDW?给平均值预留存储空间
YSSJDB'yua nshishujujilushi:$:原始数据的输出提示PXHDBODH,OAH,'paixuhoudeshujujilushi:$:排序后的输出
;提示
MAXSDBODH,OAH,'zuidazhishi:$:最大值输出提示MINSDBODH,OAH,'zuixiaozhishi:$:最小值输出提示
EQSDB0DH,0AH,'pingjunzhishi:$';平均值10 进制输出提示
EQEDB0DH,0AH,'pi ngjun shudeerji nzhidaimashi:$:平均值
;的二进制数制的输出提示
DATAENDS
;定义堆栈段
STACKSEGMENTPARASTACK'STACK'
STAPNDW200DUP⑺
STACKENDS
;定义代码段
CODESEGMENT
ASSUMECS:CODE,DS:DATA,SS:STACK各代码段,数据段,堆栈段;
初始化
START:MOVAX,DATA
MOVDS,AX
MOVCX,N-2
;原始数据显示
MOVDX,OFFSETYS显示‘原始数据的输出提示’的字符串,下同
MOVAH,9系统调用09H号功能,输出字符串
INT21H
MOVCXN俞出原始数据循环初值
MOVDX,10;D的初始化
MOVSI,0;变量的偏移量024,6,8
XSX:MOVAX,VAR[SI]将变量依次取出,逐个显示CALLXSXH调用显示子程序
ADDSI,2;改变变量的偏移量
DECCX改变CX结束循环
LOOPXSX
;冒泡算法
MOVCX,N-2
WXH:PUSHCX
MOVSI,0
NXH:MOVAX,VAR[SI暂存当前内存中的数据,一个字变量
CMPAX,VAR[SI+2]与下一内存中的字变量比较
JLENXF如果前一字变量不大于后一字变量,不做交换,;直接修改偏移地址
XCHGAX,VAR[SI+2]该项SI值并不改变
XCHGAX,VAR[SI]交换,将较大值往后移
NXF:ADDSI,2;改变偏移量,将所有数比较完
DECCX实现内层循环
LOOPNXH
POPCX改变外层循环次数
DECCX外层循环次数递减
LOOPWXH
;排序后的数据显示(同原始数据显示)
MOVDXQFFSETPXH示'排序后数据的输出提示’的字符串
MOVAH,9字符串显示
INT21H
MOVCX,N
MOVDX,0
MOVSI,0
XSH:MOVAX,VAR[SI]
CALLXSXH调用显示子程序
ADDSI,2
DECCX
LOOPXSH
;最小值输出显示
MOVDX,OFFSETMINS
MOVAH,9
INT21H
MOVSI,0
MOVAX,VAR[SI]最小值是排序后该片内存中偏移量为0的数值
CALLXSXH
;最大值输出显示,最大值的偏移量与定义的类型及个数有关MOVDXQFFSETMAXS
MOVAH,9
INT21H
MOVAX,VAR[SI+8]最大值是该片内存中偏移量最大为N-2的值CALLXSXH
;求平均值
MOVDX,0
MOVCX,2保存求和的个数,此处去掉最大最小值,个数为
;N/2-2
MOVSI,2;暂存求和起始偏移量,此处为2,不排最小值
MOVAX,VAR[SI]
QH:ADDSI,2
ADDAX,VAR[SI]
LOOPQH匕循环用来求取排完序后的和
MOVBX,3
CWD T展,求平均值,此处平均值大于255
IDIVBX;余数在DX 商在AX
MOVEJ,AX将平均值(即商)写入内存,备用
;使用PUSH POP功能实现显示10进制的平均值MOVDXQFFSETEQS
MOVAH,9
INT21H;输出相应提示字符串
MOVAX,[EJ];将平均值写入寄存器,进行处理
MOVBL,10先取最低位
IDIVBL
MOVDL,AH余数在高位,给DX暂存
PUSHDXI低位先压栈
ANDAX,00FFH备余数清0,保留商,再次取余
IDIVBL;此前为变BL值,再次取余,的次低位
MOVDL,AH将余数给DL暂存
PUSHDXI低位压栈
MOVDL,AL此例仅3为,若有更高位,继续上述处理
PUSHDXI高位压栈
MOVCX,3;C存十进制数的位数
XHSC:POPDX
ADDDL,30H
MOVAH,02H
INT21H
LOOPXHS依次弹出最高位,次高位,最低位,并逐一显示;将平均值转换为二进制显出
MOVDXQFFSETEQE
MOVAH,9
INT21H;输出相应提示字符串
MOVBX,[EJ];将平均值写入BX寄存器进行处理
MOVCX,16循环次数,与定义的类型相关,一个字节8次
XHYW:ROLBX,循环左移,依次取最低位
MOVDL,BL数据暂存
ANDDL,01H取最低位,其余清0
ADDDL,30H
MOVAH,02H
INT21H
LOOPXHY依次显示各位
;算法结束,回归系统
MOVAH,4CH
INT21H
;显示子程序仅用于显示,此处不使用堆栈,
XSXHPROC
MOVBL,1O0这里取最高位,数值100与位数有关,若有4位,则为1000
IDIVBL;除法,得余数和商
MOVDX,A)高余低商,故将商给DX取最高位,商只有一位
PUSHDX^护DX
ADDDL,30H
MOVAH,02H
INT21H;显示最高位
POPDX
MOVALQH
ANDAX,00FFH将余数位清0,以免影响结果
MOVBL,10
IDIVBL
MOVDX,AX
PUSHDX
ADDDL,30H
MOVAH,02H
INT21H;显示次高位
POPDX
MOVDL,DH
ADDDL,30H
MOVAH,02H
INT21H;显示最低位,若有更高位与上述方法一致MOVDL,2CH;A此处未变
INT21H
RET
XSXHENDP
CODEEND代码段结束
ENDSTAR源程序结束
流程图:
改变变量偏移量,改变CX
卜一变量比较确定是否交换
字符串 -pa^uhop^eshujujilushi ------ 输出
调用了程序显示
最大最小值取出显示
开始
显示 yuanshishujujilushi
的字符
设置循环初值
了程序
取最高位
依次取出变量显示
进行除法
显示最咼位
调用子程序
CX=O
? Y
余数置零
暂存当前字变量
显示次咼位
显示最低位
去掉最大最小值求平均值并输出
巳
求
纟结束
三、运行结果
yua nshishujujilushi:300,250,280,240,260,
paixuhoudeshujujilushi:240,250,260,280,300, zuixiaozhishi:240,
zuidazhishi:300
pingjun zhishi:263
pingjun shudeerji
nzhidaimashi:OOOOOOO1OOOOO111
编译:
链接:
rrhc COMPAQ Fcrsondi 1 Conput eir Lin he r Un T9- ion 2 4H C CCo pi ght CoropAf] C ORI [MI t e r ion 19B2 # 1 CO t Gopii i i*iiglut M icrosoft Corp? 19B1 > 1
ObjC' C C Ho d u l^s l| H QBiJ )
Hun Fi 1c IMP! EXE I : List File
INIIL.MAPI :
运行结果:
08060601 meeBi
p^l xu nou ae sitti ju j 1 Eui x 1^0 zhl
shi?2^0, EU I da zhi shl = 3HM, ping
jun zhi shi z2^3
Jun sHu de eminated noir VIA ■ 2 [ 四、调试分析和体会 用DO命令查看排序前后,内存数据的变化 在此次编写程序的过程中,遇到问题主要是因为对冒泡法的不熟悉,在编写程序的过程中进度较慢,参照看书上的冒泡法,但是在之后遇到的问题便是在编译出错很多时,需要慢慢地借助DEBUG:具以及自己的检查来找出错误,这个过程比较艰难。 错误主要出现在: 由于此次的程序较长,在进行跳转的时候弄错跳转的地方,而每次检查又比较的久,主要借助单步调试来进行检查。此外在调用程序的过程中,对CALL指令的不熟悉,导致错用误用。还有就是程序的逻辑性思维还是有些混乱,导致程序调试编写的过程比较艰难。但最后还是在不断地DEBUGS把冒泡的程序理解深入并编写调试成功。 自身体会: 逻辑思维的训练不是一朝一夕的事情,每次都会因为逻辑思维的不清晰,而导致编写程序时有些混乱。在冒泡法的程序中表现得尤为明显。并且对于一些调用的指令还是不太熟悉,需要理论和实际一块加强。另外在编写程序中,以后要养成在写完每一句在后边加注释的习惯,这样子,便会加强程序的可读性,不管是自己还是别人。程序在编写运行的过程中,单步调试来进行检查是个很好的工具,就像老师所说的,如果让老师给检查错位,老师也一眼看不出来,也需要进行DEBU来进行找错,而我们有这个工具,就要学会自己利用工具来找错误,既会让自己深刻理解程序,也可以锻炼自己的独立学习的能力。
正在阅读:
微机原理与接口技术实验——冒泡法05-04
工程创鲁班奖的措施12307-07
益智区观察记录 doc03-13
高中美术设计教案11-24
华南农业大学期末考试试卷参考答案05-20
房屋建筑工程竣工验收档案馆需要哪些资料12-13
挥之不去的遗憾作文600字07-15
2016年广东广州民航职业技术学院自主招生模拟题(含解析) - 图文03-16
软件技术基础模拟试题(精)12-25
- 教学能力大赛决赛获奖-教学实施报告-(完整图文版)
- 互联网+数据中心行业分析报告
- 2017上海杨浦区高三一模数学试题及答案
- 招商部差旅接待管理制度(4-25)
- 学生游玩安全注意事项
- 学生信息管理系统(文档模板供参考)
- 叉车门架有限元分析及系统设计
- 2014帮助残疾人志愿者服务情况记录
- 叶绿体中色素的提取和分离实验
- 中国食物成分表2020年最新权威完整改进版
- 推动国土资源领域生态文明建设
- 给水管道冲洗和消毒记录
- 计算机软件专业自我评价
- 高中数学必修1-5知识点归纳
- 2018-2022年中国第五代移动通信技术(5G)产业深度分析及发展前景研究报告发展趋势(目录)
- 生产车间巡查制度
- 2018版中国光热发电行业深度研究报告目录
- (通用)2019年中考数学总复习 第一章 第四节 数的开方与二次根式课件
- 2017_2018学年高中语文第二单元第4课说数课件粤教版
- 上市新药Lumateperone(卢美哌隆)合成检索总结报告
- 冒泡
- 微机
- 接口
- 原理
- 实验
- 技术
- 【答案】郑州大学远程教育《单片机原理》第04章在线测试
- 2020年山东省中考生物第八单元第二章真题模拟精选实训(含答案)
- 商砼站全套安全生产管理制度
- 农业种植合作合同范本
- 火灾条件下建筑结构倒塌原因规律及应对(通用版)
- 思科路由器配置命令详解及实例(免积分)
- 湖南科技大学操作系统课程设计实验报告
- 人教版小学六年级数学上册期末测试题(2018最新审定)
- 城市供用热力合同范文
- 中山一中2013届高三下学期高考模拟考试(政治)
- 平方机房七氟丙烷自动灭火系统FM灭火剂报价清单.docx
- 人教版七年级下册生物知识点
- 师生学习习近平总书记纪念马克思诞辰200周年大会重要讲话精神发言稿
- 2010下-化工热力学期末考试闭卷A及答案-推荐下载
- 黑龙江省友谊县红兴隆管理局第一高级中学1516学年度高
- 【新人教版】七年级语文下册第三单元9阿长与山海经第2课时教案
- 基于nRF24L01无线模块的井下流量数据传输设计
- 小数乘小数竖式计算
- 安全知识竞赛题库及答案
- 采油工中级试卷正文