已阅读5页,还剩19页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
辽 宁 工 业 大 学 课 程 设 计 说 明 书(论 文)汇编语言课程设计(论文)题目: 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课程设计目的本课程设计是计算机科学与技术专业的技术实践课。主要目的是使学生学会微机汇编语言程序的整体设计过程和设计思路,将微机汇编语言程序设计理论应用到实践中去,从而提高学生微机汇编语言程序设计的实践能力,逐步培养学生分析问题、解决问题的能力。同时,经过一周的强化实践,从而使得学生所学的知识能过融会贯通,起到提高综合思考问题、解决问题能力的作用。微机与汇编技术课程主要讲述计算机科学与技术专业研究开发计算机软,硬件技术所需得最快,最有效的微机汇编语言程序设计的基本控制结构,设计方法。与其它计算机原理、编译原理、计算机网络、程序设计得专业课程关系十分密切。本课程设计得目的综合应用学生所学知识,使学生达到熟练掌握微机汇编语言及其程序设计,掌握微机与汇编技术的软硬件设计得基本方法与技巧,培养设计和编制软硬件技术的能力。1.2课程设计的实验环境硬件环境:ibm-pc机,硬盘40g以上,内存256m以上,打印机等。软件环境:windows 2000 server或windows xp server操作系统,tc,qe等编辑软件。masm汇编软件。1.3课程设计的预备知识计算机文化、软件工程、数字逻辑电路及开发工具的学习等。1.4课程设计要求(1)从功能上对课设题目进行分析;(2)通过小组讨论,确定本开发组得题目目标,这是题目开发的全部基础所在;(3)编写系统(用户)功能设计书,系统功能设计书是题目开发验收得唯一依据;(4)完成程序结构设计,写出设计报告;(5)在规定的实践内,完成模块规划,写出模块接口及主要功能说明,完成功能测试;(6)开发并完成系统调试;(7)提交经过测试的系统以及全部文档;(8)提交项目总结报告;第2章 课程设计内容2.1 概述(1)需求分析:了解基本原理,确定软件的基本功能,查找相关资料,画出基本的程序流程图;(2)总体设计:确定软件的总体结果、模块关系和总体流程图;(3)详细设计:确定模块内部的流程和实现算法;(4)上机编写源代码和源代码调试;(5)上机运行求出实际程序运行结果。 本次课程设计包含两个题目:1、字母下落一行的子程序2、将数据由小到大排序并在显示器上显示题目一:在内存缓冲区buf中存放着一组无符号的字数据,要求采用模块化程序设计技术,将这组数据由小到大排序并在显示器上显示。题目分析:将任务划分成三个模块:主控模块、排序模块、显示模块。各模块的命名及功能如下:(1)主控模块:命名为main,功能为实现各个子模块的调用,在主模块内定义数据区。(2)排序模块:命名为sort,功能为实现将buf缓冲区中的一组数据由小到大排序。(3)显示模块:命名为output,功能为实现将buf缓冲区中的数据转换成ascii码存放在tab缓冲区并输出。题目二:将36位bcd数转换成asscii十进制数,以bcdbuff为首地址的内存区中存有18个字节的组合bcd数,要求转换为相应的36个ascii十进制数,并依次输出到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 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 程序编码设计程序编码的设计是继题目任务功能、结构分析之后,根据程序流程图对题目任务用汇编语言实现的过程,整个过程包含多次反复的调试、运行以及修改,然后得到功能完整的程序编码。现在将实现任务的编码部分列出并解释如下:题目一: 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 ax,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 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 ;子函数结束 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 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 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,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 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,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 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 为了保护数据所以本程序需要用堆栈来保护数据,堆栈段代码定义如下所示:stack segment ;堆栈段定义 stack1 db 5 dup(?) ;定义5个空单元 stack ends 因为计算机一次只能输出一个字所以需要将字数据进行拆分为一个个字符输出,具体代码如下所示: 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 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 lp6 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 .”的形式定义;这些数据以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,如果第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码,高、低位ascii码分别放在bh、bl中,作为入口条件,为进行输出在屏幕上作准备。2.5题目设计程序运行过程及测试结果 程序编写完后就要运行、调试,以检查程序不合理的地方,根据运行结果调试,修改最终形成一个完整、合理的程序。本程序运用masm5软件进行调试,调试时首先要进入masm5软件的这个文件夹,并在其编写环境edit下编写。编写好后,就可以进行通过masm命令进行调试;调试成功后在通过link命令链接;链接成功后就可执行.exe文件。具体过程如下:程序一:k4的调试 k4的链接及运行结果ex1的链接及运行结果程序二:k7的编译 k7的运行结果第3章课程设计总结3.1总结经过的本次的微机原理与汇编语言课程设计,我计算机的内部结构、数据存储方式等有了更深入的了解,此外在对汇编语言的使用过程中,利用debug软件的调试功能,体会到了指令在计算机内部执行过程的整体架构,这对将来有志从事计算机专业方向的我来讲是个不小的收获。这次课程设计,我巩固所了学过的知识,能用汇编语言熟练地运用过程调用、循环两大结构,进一步掌握了各个指令的功能,特别是转向指令,掌握了子程序的定义及调用,以及正确地运用debug指令。在整个程序的编写中,调试占了很大部分的时间。要想写好汇编语言的程序,必须认真对待代码的每一个细节,还必须熟练的掌握debug命令,这对程序的调试是非常重
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 单位租车协议书模板15篇
- 协议合同酒店
- 以创新管理模式推动发展在企业管理经验交流会上的发言
- 酒后头痛病因介绍
- 山东省济宁市微山县第二中学2024-2025学年高一12月月考历史试题
- (范文)发酵罐项目立项报告
- 房屋与室内环境检测技术-模块三房屋实体查验与检18课件讲解
- 2024秋新沪科版物理八年级上册课件 第六章 熟悉而陌生的力 第4节 探究:滑动摩擦力大小与哪里因素有关
- 《2024产业互联网发展报告》教学应用说明
- 电力及电机拖动试题及参考答案
- 原子吸收光谱仪的结构
- MJS工法施工技术及控制要点
- 穿越220kV线路施工方案
- 2011辛卯年风水布局概述
- 养殖户粪污污染情况整改报告2篇
- Q-FT B039-2006汽车产品油漆涂层技术条件
- 2022年营配贯通项目背景,相关系统及工作内容介绍
- 工程公司薪酬体系方案
- 机械工程测试与控制技术项目设计
- 干式变压器检修维护手册.
- 传染病漏报检查、责任追究制度
评论
0/150
提交评论