【2017年整理】数据分类程序

上传人:豆浆 文档编号:1052336 上传时间:2017-05-26 格式:DOC 页数:13 大小:234KB
返回 下载 相关 举报
【2017年整理】数据分类程序_第1页
第1页 / 共13页
【2017年整理】数据分类程序_第2页
第2页 / 共13页
【2017年整理】数据分类程序_第3页
第3页 / 共13页
【2017年整理】数据分类程序_第4页
第4页 / 共13页
【2017年整理】数据分类程序_第5页
第5页 / 共13页
点击查看更多>>
资源描述

《【2017年整理】数据分类程序》由会员分享,可在线阅读,更多相关《【2017年整理】数据分类程序(13页珍藏版)》请在金锄头文库上搜索。

1、 课 程 设 计 报 告课程 微机原理课程设计 题目 数据分类程序 系 别 年 级 08 专 业 电子科学与技术 班 级 学 号 None 学生姓名 Nobody 指导教师 Someone 职 称 教师 设计时间 2011 年 1 月 4 日2011 年 1 月 7 日常熟理工学院课程设计报告1目录1. 课程设计题目.22. 设计原理.23. 设计步骤.34. 程序设计心得.75. 附录.8参考文献.11常熟理工学院课程设计报告2一、 课程设计题目:数据分类程序使用汇编语言编写程序,实现将内存中当前数据段从 0000H 开始到 00FFH结束的 256 个任意数据找出大于 0 的、等于 0、小

2、于 0 的数据个数,显示在屏幕上。二程序设计原理我们实验的目的是:使用汇编语言编写程序,实现将内存中当前数据段从0000H 开始到 00FFH 结束的 256 个任意数据找出大于 0 的、等于 0、小于 0 的数据个数,显示在屏幕上。一开始,我计划用 DOS 功能调用来实现功能。后来老师提示我先使用 MOV指令,将内存中保存的数据赋给寄存器,再进行处理。于是我在程序的设计中,将所需内存地址赋给 BX 寄存器,以 BX 寄存器为索引,一个一个将数字取出,再送入 AL 寄存器与 0 比较大小,按比较之后的结果分别进行统计。而 CX 寄存器中则保存程序循环的次数,在每一次 LOOP 命令后 CX 都

3、会自动自减 1。在输出的时候,我遇到了技术上的瓶颈我输出的三种情况之和已经远远超过了 256,后来发现,我在将 BCD 码转换成 ASCII 码的时候是 3 位十进制数一起转换的,只有当数据的值位 1 位十进制数时才可能获得正确的结果。于是,我增加了一个叫做 CG 的子程序段(意为 Change) ,通过 3 次调用,将得到的统计数(三种情况出现的次数)据除以 100,获得百位的数字,再用余数除以 10,获得十位数的字,第二次除法运算后的余数自然是个位的数字,将这三个数字按高低位顺序输出,即可得到正确的答案。其他的扩展包括输出结果前的 3 句提示语,以便我们了解各种情况的具体分布。我们的程序没

4、有使用堆栈段,这是因为没有采用压栈出栈等操作命令。常熟理工学院课程设计报告3三、设计步骤程序流程图开始给 BX 赋值为 00H 作为索引N N2+1N1+1N3+1定义 3 个变量 N1,N2,N3 初值为 0是否大于 0是否小于 0YNYBX+1BX 是否大于FFHNY调用 3 次子程序段 Nx 除以 100把商转为 ASCII 输出把余数转为 ASCII 输出余数除以 10子程序开始返回主程序返回 DOS结束常熟理工学院课程设计报告4在数据段中事先准备好三句话,方便对输出大于 0,小于 0 和等于 0 的三种情况进行区分:EQA DB THE NUMBER OF THE NUMBERS E

5、QU 0 IS $HIG DB 0AH,0DH,THE NUMBER OF THE NUMBERS HIGHER THAN 0 IS $LW DB 0AH,0DH,THE NUMBER OF THE NUMBERS LOWER THAN 0 IS $注:我在后两句提示语前使用了 0AH,0DH 回车和换行下面我们要开始运行循环,比较,以及统计:MOV CX,0FFH ;将运行次数赋给 CXMOV BX,00H ;将地址 00H 赋值给 BX 寄存器LP: MOV AL,BX ;从 BX 所指向的地址取出一个数,赋给 AL 寄存器CMP AL,0 ;将取出的数与 0 比较JG HIGH1 ;若大

6、于 0,跳转到 HIGH1JL LOW1 ;若小于 0,跳转到 LOW1JMP EQ1 ;等于 0,跳转到 EQ1HIGH1: INC N2 ;高于 0 自增 1JMP NEXT ;跳到 NEXTLOW1: INC N3 ;低于 0 自增 1JMP NEXT ;跳到 NEXTEQ1: INC N1 ;等于 0 自增 1NEXT: INC BX ;指向下一个数字的地址LOOP LP ;循环下面这一段是输出提示语,然后调用子程序段 CG 输出统计的数据,在调用子程序段之前先将 AX 寄存器清零,防止出现问题:LEA DX,EQA ;准备输出等于 0 的数字个数的提示语常熟理工学院课程设计报告5MO

7、V AH,9HINT 21H ;输出提示语MOV AX,0 ;将 AX 清零MOV AL,N1CALL CG ;为输出等于 0 的数字个数调用子程序LEA DX,LW ;准备输出小于 0 的数字个数的提示语MOV AH,9HINT 21H ;输出提示语MOV AX,0 ;将 AX 清零MOV AL,N3CALL CG ;为输出小于 0 的数字个数调用子程序LEA DX,HIG ;准备输出大于 0 的数字个数的提示语MOV AH,9HINT 21H ;输出提示语MOV AX,0 ;将 AX 清零MOV AL,N2CALL CG ;为输出大于 0 的数字个数调用子程序这里是子程序段,整个程序输出的

8、核心部分,通过统一的三次调用,将大于0,等于 0,小于 0 的个数分为百位,十位,个位,再分别转化为 ASCII 码顺序输出:CG PROC ;格式转换和输出子程序MOV CL,64HDIV CL ;Nx 除以 100MOV BH,AH ;余数 1 送入 BH 寄存器OR AL,30H ;转换百位数MOV DL,ALMOV AH,2H常熟理工学院课程设计报告6INT 21H ;输出百位数MOV AL,BH ;从 BH 取回余数 1,送入 ALMOV AH,0 ;对 AH 清零MOV CL,0AHDIV CL ;Nx 除以 10MOV BH,AH ;余数 2 送入 BH 寄存器OR AL,30H

9、 ;转换十位数MOV DL,ALMOV AH,2HINT 21H ;输出十位数MOV AL,BH ;从 BH 取回余数 2,送入 ALOR AL,30H ;转换个位数MOV DL,ALMOV AH,2HINT 21H ;输出个位数RETCG ENDP统计出:等于 0 的个数为 39 个小于 0 的个数为 51 个大于 0 的个数为 165 个常熟理工学院课程设计报告7经过运行,得出的三种情况之和为 255,与所取的 255 个数据相符。本程序设计的预计功能已经实现。四、程序设计心得在以前的微机原理课程中我对此已经有所了解,但也只是略明白一些指令,缺乏系统性的学习。通过本次的课程设计让我们掌握了

10、汇编的重点,了解了汇编的基本规则。以下是我们本次课程的心得:对于本次的课程,首先我使用 MOV 指令,将内存中保存的数据赋给寄存器,再进行处理。于是我在程序的设计中,将所需内存地址赋给 BX 寄存器,以 BX寄存器为索引,一个一个将数字取出,再送入 AL 寄存器与 0 比较大小,按比较之后的结果分别进行统计。而 CX 寄存器中则保存程序循环的次数,在每一次LOOP 命令后 CX 都会自动自减 1。我们必须将 BCD 码转换成 ASCII 码的时候是 3 位十进制数一起转换的,只有当数据的值位 1 位十进制数时才可能获得正确的结果。于是,我增加了一个叫做 CG 的子程序段(意为 Change)

11、,通过 3 次调用,将得到的统计数(三种情况出现的次数)据除以 100,获得百位的数字,再用余数除以 10,获得十位数的字,第二次除法运算后的余数自然是个位的数字,将这三个数字按高低位顺序输出,即可得到正确的答案。在这次程序设计中,我使用了子程序段来解决同一功能多次运行代码冗长的问题。使用子程序之后,程序结构更加精简,可读性也更好了。相对将同一段代码输入多次,也更不容易出错。通过此次程序设计,我们较好地掌握了子程序段的使用,很多的操作也更加熟练了。常熟理工学院课程设计报告8五、附录程序源代码:DATA SEGMENTEQA DB THE NUMBER OF THE NUMBERS EQU 0

12、IS $HIG DB 0AH,0DH,THE NUMBER OF THE NUMBERS HIGHER THAN 0 IS $LW DB 0AH,0DH,THE NUMBER OF THE NUMBERS LOWER THAN 0 IS $N1 DB 0N2 DB 0N3 DB 0DATA ENDSCODE SEGMENTASSUME CS:CODE,DS:DATASTART: MOV AX,DATAMOV DS,AXMOV CX,0FFH ;将运行次数赋给 CXMOV BX,00H ;将地址 00H 赋值给 BX 寄存器LP:MOV AL,BX ;从 BX 所指向的地址取出一个数,赋给 AL

13、 寄存器CMP AL,0 ;将取出的数与 0 比较JG HIGH1 ;若大于 0,跳转到 HIGH1JL LOW1 ;若小于 0,跳转到 LOW1JMP EQ1 ;等于 0,跳转到 EQ1HIGH1: INC N2 ;高于 0 自增 1JMP NEXT ;跳到 NEXTLOW1: INC N3 ;低于 0 自增 1JMP NEXT ;跳到 NEXT常熟理工学院课程设计报告9EQ1: INC N1 ;等于 0 自增 1NEXT: INC BX ;指向下一个数字的地址LOOP LP ;循环LEA DX,EQA ;准备输出等于 0 的数字个数的提示语MOV AH,9HINT 21H ;输出提示语MOV AX,0 ;将 AX 清零MOV AL,N1CALL CG ;为输出等于 0 的数字个数调用子程序LEA DX,LW ;准备输出小于 0 的数字个数的提示语MOV AH,9HINT 21H ;输出提示语MOV AX,0 ;将 AX 清零MOV AL,N3

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 行业资料 > 其它行业文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号