作业汇编课程设计_第1页
作业汇编课程设计_第2页
作业汇编课程设计_第3页
作业汇编课程设计_第4页
作业汇编课程设计_第5页
已阅读5页,还剩16页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、20计算机应用技术二班 赵春杨 贵州航天职业技术学院 汇编语言程序设计 题目:从键盘输入一个字符串,然后按升序排序显示输出班 级 : 计算机应用技术(2)班学 号 : A123GZ0530102025 姓 名 : 赵 春 杨 指导教师 :周 庆 国 2013.12.5年汇编语言程序设计前言 汇编语言程序设计汇编大多是指汇编语言,汇编程序。把汇编语言翻译成机器语言的过程称为汇编。在汇编语言中,用助符(Memon)代替操作码,用地址符号(Symbol)或标号(Label)代替地址码。这样用符号代替机器语言的二进制码,就把机器语言变成了汇编语言。于是汇编语言亦称为符号语言。用汇言编写的程序,机器不能

2、直接识别,要由一种程序将汇编语言翻译成机器语言,这种起 翻 译作用的程序叫汇编程序,汇编程序是系统软件中语言处理的系统软件。 汇编语言(Assembly Language)是面向机器的程序设计语言。汇编语言比机器语言易于读写、易于调 试和修改,同时也具有器语言执行速度快,内存空间少等优点,但在编写复杂程序时具有明显的局限性,汇编语言依赖于具体的机型,不能通用,也不能在不同机型之间移植。是能完成一定任务的机器指令的集合。 常说汇编语言过时,是 低 级 语 言,并不 是 说 汇 编 语 言 要 被 弃 之,相 反,汇编语言仍然是程 序 员 必 须 了 解 的 语 言,在 某 些 行 业 与 领 域

3、,汇 编 是 必 不 可 少 的,非 它 不 可 适 用 。只 是,现 在计算机最大的领域IT软 件 ,也 是 我 们 常 说 的 Windows编 程,在 熟 练 的 程 序 员 手 里,使 用汇编语言编写的程序,运行效率与性能比其它语言写的程序是成倍的优秀,但是代价是需要更长的时间来优化,如果对计算机原理及编程基础不扎实,实在是得不偿失,对比现在的软件开发,已经是市场化的软件行业,加上高级语言的优秀与跨平台,一个公司不可以让一个团队使用汇编语言来编写所有的东西,花上几倍甚至几十倍的时间,不如使用其它语言来完成,只要最终结果不比汇编语言编写的差太多,就能抢先一步完成,这是市场经济下的必然结果

4、。 但是,至今为止,还没有程序员敢断定汇编语言是不需要学的,一个不懂汇编语言的程序员,只是三流的程序员,这是大部分人的共识,同时,技术汇编语言(Assembly Language)是面向机器的程序设计语言精湛的汇编程序员,已经脱离软件开发,挤身于工业电子编程中,一个电子工程师,主要开发语言就是汇编,c语言使用只占极少部分,而电子开发工程师是千金难求,在一些工业公司,一个核心的电子工程师比其它任何职员待遇都高,对比起来,一般电子工程师待遇是程序员的十倍以上。这种情况是因为现在学习汇编的人虽然也不少,但 是 真 正 能 学 到 精 通 的 却不 多,它 难 学,难 用,适 用 范 围 小 ,虽 然

5、 简 单,但 是 过 于 灵 活 ,学习过高级语言的人去学习汇编比一开始学汇编的人难得多,但是学过汇编的人学习高级语言却很容易,简从繁易,繁从简难。 总之,汇编语言是程序员的必修语言。20 / 21文档可自由编辑打印目录 CONTENTS 汇编语言处理数据 前言一、提出需求 . 6 1.1 汇编语言简介 . 6 1.2 设计开发平台 . 6 1.3 需求分析 . 7二、详细设计 . 7 2.1 分析 . 2 2.1.1 数据输入模块 . 8 2.1.2比较排序模块 . 9 2.1.3数据输出模块. 10 2.2 调试中的问题及解决方法. 11 2.3执行过程 . 12总结 . 14附 录:程序

6、代码 . 15参考资料:. 20 一提出需求1、提出设计要求 课题名称:用汇编语言处理数据 课题功能:随机从键盘输入经排序后,按照从升序的顺序显示出来。(注:输入数据个数范围可视具体情况更改)2、需要用到的知识点 掌握80X86汇编指令及中断的使用方法; 掌握DOS系统功能调用; 掌握基本的数据处理方法(输入、输出、排序)1.1 汇编语言简介汇编语言(Assembly Language)是面向机器的程序设计语言,采用助记符来编写程序,比用机器语言的二进制代码编程要方便些,在一定程度上简化了编程过程。使用汇编语言能面向机器并较好地发挥机器的特性,比机器语言易于读写、易于调试和修改,同时也具有机器

7、语言执行速度快,占内存空间少等优点,因而可以得到质量较高的程序。1.2 设计开发平台汇编语言集成编译器(Visual Assembly 1.2版)是运行在DOS环境下,提供了编辑、编译、运行、调试汇编语言程序的集成环境。目前支持MASM、TASM、MCS51三种编译器。第一次使用时,要在选项菜单中选择您所使用的编译器类型及其目录所在。masm为MASM类型的编译器,其中:masm.exe为编译器,link.exe为连接器; tasm为TASM类型的编译器,其中:tasm.exe为编译器,tlink.exe为连接器; mcs51为MCS51类型的编译器,用于MCS51单片机汇编语言的编译,其中:

8、asm51.exe为编译器,OH.exe为目标文件转十六进制文件(连接器选项选择此文件)。本次设计使用的是MASM类型的编译器。1.3 需求分析 本程序是通过汇编语言实现数据的排序及输入、输出的处理,适用于多数据排序的处理,程序结构包含三部分:数据输入、数据排序、数据输出。设计思路是先用一段程序实现成绩的录入,并暂存在数据表中,再将数据调出进行从大到小的比较,最后用DOS功能调用将完成排序的数据输出显示。二.详细设计2.1 分析程序结构分为三个功能模块:数据输入、数据排序、数据输出。数据输入模块:用DOS调用的1号功能实现输入并显示。因输入数据是以ASCII码形式存放,所以还要对输入数据进行处

9、理,用AND指令将ASCII码转换为压缩BCD码。并将所有输入数据连续放入存储单元中,为后面的数据处理做准备。数据排序模块:将存储单元的数据按照从大到小的顺序排序。用冒泡法将数据表中的第一个数依次与后面的数两两相比,若小于则将两数的地址互换,直到无地址交换为止。其中需设置一标志来判断比较是否结束,因N个数据排序理论上需进行(N-1)×(N-1)次比较,但实际上不用比较这么多次,所以当标志位的值没有发生变化时,即完成排序。输出显示模块:用DOS调用的2号功能实现输出显示,因该功能是显示字符,所以这部分也涉及数据转换,即将压缩BCD码转换成ASCII码,并判断数据是否输出完整,再显示。数

10、据输入模块 数据排序模块数据输出模块结束开始完整流程图如图21所示。2.1.1 数据输入模块 初始化,提示输入字符串开始输入判断是否为输入结束标志转换为BCD码处理为十位并暂存转换为BCD码并暂存 放入数据表中输入排序显示提示输入用户在输入信息的提示下,从键盘随机输入后,按照从升序的顺序显示出来。因输入数据是ASCII码,所以还要实现数据转换,即将ASCII码转换为压缩BCD码。设一标志判断数据是否输入完成,一边输入一边将当前数据保存到指定存储区。数据输入流程图如图22所示。 是 否 图2-2 数据输入部分2.1.2比较排序模块 设置数据交换标志为0,依次从存储单元中取数据,比较后判断是否需要

11、进行位置交换,直到完成对所有数据的比较,则比较结束。数据排序流程图如图23所示。输入结束在输入数据结尾加结束标志取数据表首地址将表中第一个数放入寄存器AL中设置数据交换标志为0地址加1,将当前地址中数据放入寄存器BL中判断BL中是否为结束标志 是 否比较AL,BL中数据大小 交换当前地址与前一地址的数据,数据交换标志置1 小将BL中数据放入AL中 大判断数据交换标志是否变化 是 输出否图2-3 数据排序 2.1.3数据输出模块 在存储单元中的数据是以压缩BCD码形式存放的,要将其显示出来,需要把它们转换为ASCII码,再调用DOS的2号功能,所以在进行显示前要完成数据转换;因输入数据个数不固定

12、,是随机的,故还需判断数据是否已完全输出,再显示。数据输出流程图如图24所示。 排序结束 以压缩BCD码的形式读取字符串到寄存器中 将不相同的字符串分离再显示数字字符 显示空格 提取下一个字符 判断是否为最后一个字符 N 结束 Y 2.2 调试中的问题及解决方法 如图2-5中文输入注释报错 1、在集成环境下运行程序,编译器出现了图2-5的提示:系统提示未初始化寄存器,但检查程序无误。进入DOS环境编译,我们可以 图2-6中发现程序代码后的“;”根本不存在,这是因为我们在中文方式下输入了“;”,将“;”在英文环境下录入程序即可正常执行。 如图2-6中文输入注释报错 2、 在集成环境下运行程序,编

13、译器出现了图2-6的提示:系统提示data: 块嵌套不匹配,一般是由于前后段名不相同、前后子程序不相同、需要配对出现的指令不一致等会出现该错误2.3执行过程1、打开汇编软件,输入该程序的源代码,进行编译,出现如图2-7.图2-72、 运行该源代码,出现如图2-8.图2-83、在DOS状态下输入该程序生成的可执行文件名出现图2-9的提示信息:图2-94、随机从键盘输入经排序后,按照从升序的顺序显示出现如图2-10.图2-10 总结经过大量的查找资料和老师的不断指点,我的课程设计成功完成,在这个过程中,我了解了汇编语言的功能,同时明白了其的工作原理并实现了其功能。 短短的四周毕业设计是我们对大学两

14、年的计算机知识的整体总结,也是理论与实践的结合。在我们现有的理论知识下结合校园的实验设备成功地完成了这次毕业设计。期间让我收获颇多。在知识技能方面我对面向机器的汇编语言的编写的再次认识与学习,加深专业基础。俗话说:“高楼基地起”,可见汇编语言的重要性。这次课程设计对我来说,要想成功地完成任务不是一件容易的事。我非常清楚我自己所学的8086汇编知识远远不足。在这次设计中困难重重,翻阅相关资料,复习以往教科书,网上搜找相关的信息和老师的细心讲解是必不可少的。在这次设计中,让我学到了新知识,也增长了见识,让我对我所学的知识有所巩固和提高,并且让我对汇编语言有了更深的了解。在今后的日子里,我仍要不断地

15、充实自己,希望在我所学的专业有所作为。 这次的课程设计在我与同学的共同努力下成功完成的。这里少不了教授我们的老师,是他授我们以渔,在认真负责的周老师带领下,同学们的团结互助。我看到了团结的力量,团结的成效,让我学到了重要的一堂社会课。脚踏实地、认真严谨、实事求是是学习应该有的态度,不怕困难、坚持不懈、吃苦耐劳是我国优良传统美德,这一次意志的磨练,是对我实际能力的一次提升,也会对我未来的学习和工作有很大的帮助。 在本次设计中,衷心的感谢我们的周老师,在我们设计过程中遇到的种种困难,全靠周老师的悉心指导和建议给了我们极大的帮助和支持,使我们受益匪浅,使得我们的动手能力和技能都有了很大的提高。所以,

16、衷心的感谢周老师。附 录:程序代码 ;<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<按ASCII编码由小到大排序从键盘上输入的字符串,然后输出;(输入以回车键结束);解:排序用冒泡法

17、,按无符号数,从小到大;<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<name string_sort;定义等价符unfinished equ 0FFFFh;标记排序任务没完成FIN

18、ISHED equ 0 ;标记排序任务完成了;-stack segment para stack 'STACK' db 16 dup('MYSTACK ') ; 16*8 字节stack ends;-datas segment buffer db 51 ;可以输入50个有效字符 count db 0 chars db 52 dup (0) crlf db 0dh,0ah,' huan ying shi yong',0dh,0ah,0dh,0ah,'$' crlg db 0dh,0ah,0dh,0ah,' sheng xu

19、shu ru jie guo',0dh,0ah,0dh,0ah,'$'datas ends;-codes segment assume cs:codes,ds:datas,es:datas,ss:stackstart: mov ax,datas mov ds,ax lea dx,crlf mov ah,9 int 21h mov es,ax ;从键盘接收一个串(回车结束) mov dx,offset buffer ;指定字符串存放的首地址 mov ah,0ah ;buffered keyboard input func int 21h ;call DOS ;排序(冒泡法

20、) mov bx,UNFINISHED ;bx用来标记大循环 xor cx,cx ;下面只使用cl,清高四位为0 mov cl,count ;取实际输入的字符数 cmp cl,1 ;检查输入的字符数 jbe sort_finished ;如果输入的字符数少于2个,就不需要排序Next_Round: cmp bx,FINISHED ;排序任务完成了吗? je sort_finished ;完成了就跳出 mov bx,FINISHED ;先标记排序任务已完成 mov cl,count ;取实际输入的字符数 dec cl ;换算成比对的次数(比字符数要少1) xor si,si ;着si为输出串的下

21、标,初值为0GetNext: mov al,charssi ;从charssi读一个数进al cmp al,charssi+1 ;al与下一个chars元素对比 jbe less ;如果小于或等于就跳转(这里要使用无符号数判断) xchg charssi+1,al ;否则,就交换 mov charssi,al ;用al中的新值回填原地址 mov bx,UNFINISHED ;标记要从头进入下一轮扫描less: inc si ;调整数组下标变元 loop GetNext ;再取下一个字符 jmp Next_Round ;进入下一个轮回sort_finished: ;输出新行 mov ah,9 mov dx,offset crlg int 21h ;显示排过序的串 xor si,si ;着si为输出串的下标,初值为0showNext: mov dl,charssi ;从输出串中提取一个字符 cmp dl,0 ;检查是不是结束符 je finish ;是就结束 mov ah,02 ;否则输出到屏幕 int 21h inc si ;指向下一个字符 jmp showNext ;进入显示下一个字符的轮回finish: ;退出 mov ax,4c00h int 21hcodes ends end start;剧终总结在本次课程设计让我充分了解了汇编语

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论