- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
微机原理与接口技术实验报告
学院:计信学院 专业: 班级
姓名 学号 实验组 实验时间 2011/5/6 指导教师 成绩 实验项目名称 实验三 汇编程序设计:循环、子程序 实验目的
熟悉8088指令系统,掌握程序设计方法
熟悉汇编语言编程,掌握串操作指令的使用 实验原理
在Debug环境下,用8086指令编写、调试汇编程序。 实验内容 编写并调试一个排序子程序,其方法为用冒泡法将RAM中几个单字节无符号的正整数,按从大到小的次序重新排列。
在4000H-400FH中查出有几个字节是零,把计数个数放在4100H中。 实验环境
Debug环境。 实验步骤
在4000H-400AH中通过键盘命令输入不等的10个数,运行本实验程序后检查4000H-400AH中内容是否按从大到小排列。在和PC机联机时,用连续单步方式,可很清楚地看出数据排序时数据移动变化情况。
在4000-400FH的几个单元中输入零,运行本程序后检查4100H中是几个单元数。 实验结果 实验分析
实验目的为在4000H-400AH中通过键盘命令输入不等的10个数,运行本实验程序后检查4000H-400AH中内容是否按从大到小排列。
1.通过键盘命令输入十个不等的数字。由于用调用dos 21号功能语句时是对每个输入的数作为字符处理,故存在一个问题:每次输入的数据存储为一个字节,且为3*H(*代表输入的数字)。此时就每次只能输入个位数字。为了解决这个问题,可以将每次输入的数字存储为字符型后去除高位的3,变为0*H,由于将输入数据看做十进制的两位数,故第一次的数字需要乘以10。故先对进行调整后的0*H乘以10,然后存在寄存器中,对于第二次的数据只需进行调整去除ASCII码带的3,然后加上第一次输入数据调整后的十位数结果。相当于输入12,存储时先将31H去除3,变为01H,然后01H*10d=0AH,再将0AH+02H=0CH.此时存储的数据才为正确的输入的十进制数字12。每次执行输入两个数字,循环十次完成输入数据。
2.内循环:进行输入的缓冲区中的数据的排序。采用冒泡排序法,第一次将第一个数据与其挨着的下一个数据进行比较,若其小于下面的数据则按大在上,小在下调换位置。然后重复比第二个数据和第三个数据,大在上,小在下,依次循环直至最后一个数据。此时保证最小的数据在最底下。
3外循环:重复进行第2步,比较直至倒数第二个数据。然后重复第2 步,比较直至倒数第三个数据。每次重复内循环,执行次数少依次,直至最后实现从大到小,依次排列。
流程图
左边为输入数据的流程图,右边为整体的流程图。
代码
DATA SEGMENT
BUFF DB 10 DUP(?)
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA
START:
MOV AX,DATA
MOV DS,AX ;初始化
MOV CX,000AH ;CX中放计数次数。由于有十个数,需循环输入10次,故CX=0AH
MOV BX,0000H ;BX作为缓冲区偏移首址,每次将输入数据BUFF中,故BX作为控制变量。
GET: PUSH CX ;CX入栈,保证循环取得十个两位的十进制数
PUSH BX ;由于在后面对输入数据进行处理的时候要用到BX,且BX又要充当缓冲区偏移地址,故每次循环获得数字时先将BX入栈,用时出栈
MOV CX,0002H ;每次获得两位十进制数时要获得两次数字,故CX为0002H
MOV BX,0000H ;每次获得两位十进制数时需要BX在两次输入数字时初始值为0,故此时赋值为0000H
newchar: ;进入获得两位十进制数字
PUSH CX ;CX入栈。即此时将0002H入栈
MOV AH,01H
INT 21H ;21号功能调用,每次输入一个字符
sub al,30h ;字符存储形式为3*H,故将输入的存储在AL中的数据减去30H.
jl STOP ;若小于30H则证明不是数字,退出
cmp al,9d
jg STOP ;若大于09d,即也不是数字,退出
cbw
文档评论(0)