汇编语言课程设计(论文)-将数据由小到大排序并在显示器上显示 将BCD码转换成十进制输出应用程序.doc

上传人:哈尼dd 文档编号:3955999 上传时间:2019-10-11 格式:DOC 页数:24 大小:296.50KB
返回 下载 相关 举报
汇编语言课程设计(论文)-将数据由小到大排序并在显示器上显示 将BCD码转换成十进制输出应用程序.doc_第1页
第1页 / 共24页
汇编语言课程设计(论文)-将数据由小到大排序并在显示器上显示 将BCD码转换成十进制输出应用程序.doc_第2页
第2页 / 共24页
汇编语言课程设计(论文)-将数据由小到大排序并在显示器上显示 将BCD码转换成十进制输出应用程序.doc_第3页
第3页 / 共24页
汇编语言课程设计(论文)-将数据由小到大排序并在显示器上显示 将BCD码转换成十进制输出应用程序.doc_第4页
第4页 / 共24页
汇编语言课程设计(论文)-将数据由小到大排序并在显示器上显示 将BCD码转换成十进制输出应用程序.doc_第5页
第5页 / 共24页
点击查看更多>>
资源描述

《汇编语言课程设计(论文)-将数据由小到大排序并在显示器上显示 将BCD码转换成十进制输出应用程序.doc》由会员分享,可在线阅读,更多相关《汇编语言课程设计(论文)-将数据由小到大排序并在显示器上显示 将BCD码转换成十进制输出应用程序.doc(24页珍藏版)》请在三一文库上搜索。

1、辽 宁 工 业 大 学 课 程 设 计 说 明 书(论 文)汇编语言课程设计(论文)题目: 1. 将数据由小到大排序并在显示器上显示 2. 将BCD码转换成十进制输出应用程序 目 录 第1章 课程设计目的与要求11.1课程设计目的11.2课程设计的实验环境11.3课程设计的预备知识11.4课程设计要求1第2章 课程设计内容22.1 概述22.2 总体设计32.3 程序编码设计72.4 题目设计源代码的分析与调试132.5题目设计程序运行过程及测试结果18第3章课程设计总结213.1总结21参考文献22第1章 课程设计目的与要求1.1课程设计目的本课程设计是计算机科学与技术专业的技术实践课。主要

2、目的是使学生学会微机汇编语言程序的整体设计过程和设计思路,将微机汇编语言程序设计理论应用到实践中去,从而提高学生微机汇编语言程序设计的实践能力,逐步培养学生分析问题、解决问题的能力。同时,经过一周的强化实践,从而使得学生所学的知识能过融会贯通,起到提高综合思考问题、解决问题能力的作用。微机与汇编技术课程主要讲述计算机科学与技术专业研究开发计算机软,硬件技术所需得最快,最有效的微机汇编语言程序设计的基本控制结构,设计方法。与其它计算机原理、编译原理、计算机网络、程序设计得专业课程关系十分密切。本课程设计得目的综合应用学生所学知识,使学生达到熟练掌握微机汇编语言及其程序设计,掌握微机与汇编技术的软

3、硬件设计得基本方法与技巧,培养设计和编制软硬件技术的能力。1.2课程设计的实验环境硬件环境:IBM-PC机,硬盘40G以上,内存256M以上,打印机等。软件环境:Windows 2000 Server或Windows XP Server操作系统,TC,QE等编辑软件。MASM汇编软件。1.3课程设计的预备知识计算机文化、软件工程、数字逻辑电路及开发工具的学习等。1.4课程设计要求(1)从功能上对课设题目进行分析;(2)通过小组讨论,确定本开发组得题目目标,这是题目开发的全部基础所在;(3)编写系统(用户)功能设计书,系统功能设计书是题目开发验收得唯一依据;(4)完成程序结构设计,写出设计报告;

4、(5)在规定的实践内,完成模块规划,写出模块接口及主要功能说明,完成功能测试;(6)开发并完成系统调试;(7)提交经过测试的系统以及全部文档;(8)提交项目总结报告;第2章 课程设计内容2.1 概述(1)需求分析:了解基本原理,确定软件的基本功能,查找相关资料,画出基本的程序流程图;(2)总体设计:确定软件的总体结果、模块关系和总体流程图;(3)详细设计:确定模块内部的流程和实现算法;(4)上机编写源代码和源代码调试;(5)上机运行求出实际程序运行结果。 本次课程设计包含两个题目:1、字母下落一行的子程序2、将数据由小到大排序并在显示器上显示题目一:在内存缓冲区BUF中存放着一组无符号的字数据

5、,要求采用模块化程序设计技术,将这组数据由小到大排序并在显示器上显示。题目分析:将任务划分成三个模块:主控模块、排序模块、显示模块。各模块的命名及功能如下:(1)主控模块:命名为MAIN,功能为实现各个子模块的调用,在主模块内定义数据区。(2)排序模块:命名为SORT,功能为实现将BUF缓冲区中的一组数据由小到大排序。(3)显示模块:命名为OUTPUT,功能为实现将BUF缓冲区中的数据转换成ASCII码存放在TAB缓冲区并输出。题目二:将36位BCD数转换成ASSCII十进制数,以BCDBUFF为首地址的内存区中存有18个字节的组合BCD数,要求转换为相应的36个ASCII十进制数,并依次输出

6、到CRT显示。BCD数存放时,低位在前,高位在后,例如,若BCD缓冲器内容12H,34H,56H,78H,.12H,56H,78H,则要求CRT上依次显示以下36个数字:785634.563412 如果36位十进制数前面有若干个”0”,例如 0000427695053.则前导的”0”可以不显示。但是,若36位数字全部为0,则要求显示一个“0”。2.2 总体设计程序的总体设计分为三个步骤:总体结构确定、模块关系确定、以及总体结构流程图的确定。其中程序流程图是整个程序实现的重点。现将程序流程图绘制如下:题目一:将数据由小到大排序并在显示器上显示程序流程图:排序模块流程图部分:开始ALSI-2INC

7、 SIINC SISI-BXCX-DXXCHGDX-CX是否否CX=0?否CX=0?是结束输出模块流程图部分:开始PUSH CXCX-5PUSH CX给TAB赋值否POP CXCX=0?是DI-DXCX- 5否输出TABCX=0?是输出DATA2,DATA1否CX=0?是结束题目二:BCD码转换成十进制数并输出在屏幕上 程序流程图:SI=SI+1AL=0AL高位为0LEA DI,SXDEC CXAL=0高位起放入DL低位开始放入DL输出MOV AL,SINYNYNY2.3 程序编码设计程序编码的设计是继题目任务功能、结构分析之后,根据程序流程图对题目任务用汇编语言实现的过程,整个过程包含多次反

8、复的调试、运行以及修改,然后得到功能完整的程序编码。现在将实现任务的编码部分列出并解释如下:题目一: STACK SEGMENT ;堆栈,数据,代码段定义 STACK1 DB 5 DUP(?) STACK ENDS DATA SEGMENT DATABUF DW 9534h,95A2h,7531h,4C35h,4833h CNT EQU 5 DATA1 DB , TAB DW 20 DUP(?) DATA2 DB H DATA ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA,SS:STACK START: MOV AX,DATA MOV DS,AX MOV A

9、X,STACK MOV SS,AX LEA SI,DATABUF LEA DI,TAB MOV DX,DI CALL OUTPUT ;调用输出子程序 MOV DL,0DH ;回车符 MOV AH,02H INT 21H MOV DL,0AH MOV AH,02H INT 21H MOV CX,CNT LEA SI,DATABUF DEC CX ADD CX,CX ADD SI,CX MOV BX,SI CALL SORT ;调用排序子程序 LEA SI,DATABUF LEA DI,TAB MOV DX,DI CALL OUTPUT ;调用输出子程序 MOV AH,4CH INT 21H SO

10、RT PROC ;子函数排序模块 MOV CX,4 LP1: MOV DX,CX ;双循环排序算法 LP2: MOV AX,SI CMP AX,SI-2 JAE NOXCHG XCHG AX,SI-2 MOV SI,AX NOXCHG: DEC SI DEC SI LOOP LP2 MOV CX,DX MOV SI,BX LOOP LP1 RET SORT ENDP ;子函数结束 OUTPUT PROC ;输出子函数 MOV CX,5 LP3: ;循环将DATABUF中的单元内容给TAB PUSH CX mov cl,4 MOV AX,SI MOV BH,AH SHR BH,CL ADD BH

11、,30H MOV DI,BH INC DI MOV AX,SI MOV BH,AH AND BH,0FH ADD BH,30H MOV DI,BH INC DI MOV AX,SI MOV BH,AL SHR BH,CL ADD BH,30H MOV DI,BH INC DI MOV AX,SI MOV BH,AL AND BH,0FH ADD BH,30H MOV DI,BH INC DI INC SI INC SI POP CX LOOP LP3 MOV CX,5 MOV DI,DX LP6:PUSH CX MOV CX,4 LP5:MOV DL,DI ;循环输出TAB中的内容 CMP D

12、L,39H ;判断是否超过9 JA LP MOV AH,02H INT 21H JMP J LP:ADD DL,7 MOV AH,02H INT 21H J:INC DI LOOP LP5 MOV DL,DATA2 MOV AH,02H INT 21H MOV DL,DATA1 MOV AH,02H INT 21H POP CX LOOP LP6 RET OUTPUT ENDP ;子函数结束 CODE ENDS END START题目二: DSEG SEGMENTBUF DB 12H,34H,56H,78H,90H,12H,34H,56H,78H,90H,12H,34H,56H DB 78H,

13、90H,12H,34H,06H;初始化BUFDSEG ENDSCSEG SEGMENT ASSUME DS:DSEG,CS:CSEG START: MOV AX,DSEG MOV DS,AX MOV CX,18 LEA DI,BUF DEC CX ADD DI,CX MOV CX,18 LP: MOV AL,DI ;判断最前面字节是否为零 AND AL,AL JNZ LP1 DEC DI LOOP LP JMP NXT2 LP1: MOV SI,DI MOV DH,DI CMP DH,0FH ;判断最前面非零字节的高位是否为零 JA AGIN ;调用agin函数,并输出高位 JMP NEXT

14、AGIN:CALL CHANGE MOV AH,02H MOV DL,BH ADD DL,30H INT 21H XOR DL,DLNEXT:CALL CHANGE MOV AH,02H MOV DL,BL ;输出低位 ADD DL,30H INT 21H DEC SI LOOP AGIN ;循环,直到将所有BCD数输出完 JMP OVERNXT2:MOV AH,02H MOV DL,30H INT 21HOVER:MOV AH,4CH INT 21HCHANGE PROC ;子程序BL,BH分别存放低位及高位的BCD数码 PUSH CX MOV BH,SI MOV AL,BH MOV CL,

15、4 SHR BH,CL AND AL,0FH MOV BL,AL POP CX RET CHANGE ENDP ;子程序结束CSEG ENDS END START2.4 题目设计源代码的分析与调试 题目一: 本题是在内存缓冲区BUF中存放着一组无符号的字数据,所以在数据段的定义一组字数据放在BUF内存单元中。并且要求采用模块化程序设计技术,经分析可以讲该程序分成三个模块:主控模块、排序模块、输出(显示)模块。所以采用子函数调用,大大简化程序的设计,并且增加了程序的可读性:数据定义部分代码如下所示:(假设本题中有6个字节数据)STACK SEGMENT ;堆栈,数据,代码段定义 STACK1 D

16、B 5 DUP(?) STACK ENDS DATA SEGMENT DATABUF DW 9534h,95A2h,7531h,4C35h,4833h CNT EQU 5 DATA1 DB , TAB DW 20 DUP(?) DATA2 DB H DATA ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA,SS:STACK 为了保护数据所以本程序需要用堆栈来保护数据,堆栈段代码定义如下所示:STACK SEGMENT ;堆栈段定义 STACK1 DB 5 DUP(?) ;定义5个空单元 STACK ENDS 因为计算机一次只能输出一个字所以需要将字数据进行拆分

17、为一个个字符输出,具体代码如下所示: OUTPUT PROC ;输出子函数 MOV CX,5 LP3: ;循环将DATABUF中的单元内容给TAB PUSH CX mov cl,4 MOV AX,SI MOV BH,AH SHR BH,CL ADD BH,30H MOV DI,BH INC DI MOV AX,SI MOV BH,AH AND BH,0FH ADD BH,30H MOV DI,BH INC DI MOV AX,SI MOV BH,AL SHR BH,CL ADD BH,30H MOV DI,BH INC DI MOV AX,SI MOV BH,AL AND BH,0FH ADD

18、 BH,30H MOV DI,BH INC DI INC SI INC SI POP CX LOOP LP3 MOV CX,5 MOV DI,DX LP6:PUSH CX MOV CX,4 LP5:MOV DL,DI ;循环输出TAB中的内容 CMP DL,39H ;判断是否超过9 JA LP MOV AH,02H INT 21H JMP J LP:ADD DL,7 MOV AH,02H INT 21H J:INC DI LOOP LP5 MOV DL,DATA2 MOV AH,02H INT 21H MOV DL,DATA1 MOV AH,02H INT 21H POP CX LOOP LP

19、6 RET OUTPUT ENDP ;子函数结束采用双重排序的子程序的代码如下所示:SORT PROC ;子函数排序模块 MOV CX,4 LP1: MOV DX,CX ;双循环排序算法 LP2: MOV AX,SI CMP AX,SI-2 JAE NOXCHG XCHG AX,SI-2 MOV SI,AX NOXCHG: DEC SI DEC SI LOOP LP2 MOV CX,DX MOV SI,BX LOOP LP1 RET SORT ENDP ;子函数结束题目二: (1)题目一中要转换的数据1234567890.123456以BCD码形式存放在内存单元BUF中,用”BUF DB .”

20、的形式定义;这些数据以BCD码的形式存入BUF。此题目最终的任务是要将内存单元中的这些BCD码显示到屏幕上,即,如果存的是23H,那么要输出在屏幕上的必须是23。 (2)题目中最关键也是最困难的一个问题是要不将前导0输出,例如,在内存单元存有0000012300,那么输出在屏幕上应该是12300。本程序此功能的实现是通过分支程序来实现的:LP: MOV AL,DI AND AL,AL JNZ LP1 INC DI LOOP LP JMP NXT2此段代码中DI最开始存放BUF首地址,通过DI就可以将BUF中的内容依次传递给AL;再由AL通过 ”ADD AL,AL” 来判断前i个单元是否为0,如

21、果第k个单元起不为0,则还需要判断,第k个单元的高四位是否为0;终上,跳过前n个0不输出,当遇到不为0才开始输出;BUF中并没有非0元素,则需要跳转到NXT2,以执行只输出一个0的指令。(3)子程序CHANGE,顾名思义,是转换的意思:CHANGE PROC ;子程序BL,BH分别存放低位及高位的BCD数码 PUSH CX MOV BH,SI MOV AL,BH MOV CL,4 SHR BH,CL AND AL,0FH MOV BL,AL POP CX RET CHANGE ENDP ;子程序结束 它将SI指向的那个BUF中的一个单元中的BCD码进行操作,转换成相应的ASCII码,高、低位A

22、SCII码分别放在BH、BL中,作为入口条件,为进行输出在屏幕上作准备。2.5题目设计程序运行过程及测试结果 程序编写完后就要运行、调试,以检查程序不合理的地方,根据运行结果调试,修改最终形成一个完整、合理的程序。本程序运用MASM5软件进行调试,调试时首先要进入MASM5软件的这个文件夹,并在其编写环境EDIT下编写。编写好后,就可以进行通过MASM命令进行调试;调试成功后在通过LINK命令链接;链接成功后就可执行.EXE文件。具体过程如下:程序一:K4的调试 K4的链接及运行结果EX1的链接及运行结果程序二:K7的编译 K7的运行结果第3章课程设计总结3.1总结经过的本次的微机原理与汇编语

23、言课程设计,我计算机的内部结构、数据存储方式等有了更深入的了解,此外在对汇编语言的使用过程中,利用DEBUG软件的调试功能,体会到了指令在计算机内部执行过程的整体架构,这对将来有志从事计算机专业方向的我来讲是个不小的收获。这次课程设计,我巩固所了学过的知识,能用汇编语言熟练地运用过程调用、循环两大结构,进一步掌握了各个指令的功能,特别是转向指令,掌握了子程序的定义及调用,以及正确地运用DEBUG指令。在整个程序的编写中,调试占了很大部分的时间。要想写好汇编语言的程序,必须认真对待代码的每一个细节,还必须熟练的掌握DEBUG命令,这对程序的调试是非常重要的。通过这次实际动手能力的培养,我进一步熟

24、悉了汇编语言的结构和使用方法,基本达到了能独立阅读、编制和调试一定规模的汇编语言程序的水平。这对将来有志从事计算机专业方向的我来讲是个不小的收获。当然在此次课设中也让我感觉到自己对课本上的知识理解还不是很好,还有很多知识点没有掌握,通过这次实践使我对课本上的知识有了更进一步的理解,同时也锻炼了我的分析问题和解决问题的能力。同时我还学到,在真正动手做一件事情之前一定要为自己的后续工作作好充分准备,通过与同学的交流和老师的帮助以及通过查找资料,会让自己更胸有成竹,对全局设计有个更好的把握。通过这次设计使我相信,只要自己在每一次实践中仔细思考,找好方法,有条理的计划好整个过程,那么无论是失败还是成功

25、一定会有所收获。这次试验同时也使我对汇编语言这门课程有了更深的了解,也提高了我的动手能力。通过理论与实践的结合,最终做出了结果,这是我对以后的学习更有信心。参考文献1 杨文显,胡建人.新编汇编语言程序设计.北京:清华大学出版社,2010.082 陆忠华.汇编语言程序设计.北京:科学出版社,2009.063 迟成文,王王保秀.汇编语言程序设计.北京:中国科学技术大学出版社,2008.074方立友.微机原理与汇编语言.北京:清华大学出版社,2007.025 颜志英.微机系统与汇编语言.北京:机械工业出版社,2007.096 齐志儒.汇编语言程序设计实验教程.沈阳:东北大学出版社,2003.027 沈美明,温冬婵.IBM-PC汇编语言程序设计.北京:清华大学出版社,2004.088 温冬婵,沈美明.IBM-PC汇编语言程序设计例题习题集.北京:清华大学出版社,2005.099 沈美明,温冬婵,张赤红.IBM-PC汇编语言课程设计实验教程.北京:清华大学出版社,2006.1023

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 其他


经营许可证编号:宁ICP备18001539号-1