汇编 字符图形程序 课程设计报告.docx

上传人:b****3 文档编号:4474488 上传时间:2022-12-01 格式:DOCX 页数:16 大小:236.50KB
下载 相关 举报
汇编 字符图形程序 课程设计报告.docx_第1页
第1页 / 共16页
汇编 字符图形程序 课程设计报告.docx_第2页
第2页 / 共16页
汇编 字符图形程序 课程设计报告.docx_第3页
第3页 / 共16页
汇编 字符图形程序 课程设计报告.docx_第4页
第4页 / 共16页
汇编 字符图形程序 课程设计报告.docx_第5页
第5页 / 共16页
点击查看更多>>
下载资源
资源描述

汇编 字符图形程序 课程设计报告.docx

《汇编 字符图形程序 课程设计报告.docx》由会员分享,可在线阅读,更多相关《汇编 字符图形程序 课程设计报告.docx(16页珍藏版)》请在冰豆网上搜索。

汇编 字符图形程序 课程设计报告.docx

汇编字符图形程序课程设计报告

 

课程设计说明书

 

题目:

字符图形程序

 

院系:

计算机学院

专业班级:

学号:

学生姓名:

指导教师:

 

2010年12月31日

安徽理工大学课程设计(论文)任务书

计算机科学与工程学院硬件教研室

学号

学生姓名

专业(班级)

题目一:

判断闰年

题目二:

简单计算器

题目三:

代码转换程序

题目四:

字符图形程序√

题目五:

学生成绩管理

题目六:

打字练习(注:

请在自己选做的题目后打√)

1.熟悉汇编指令、宏汇编语言的编程方法

2.BIOS中断调用、系统功能中断调用方法

3.磁盘文件、及文件内容操作

题目的选择是根据汇编语言的特点主要针对系统内部的一些中断调用、系统功能调用、系统数据处理、文件数据处理而设计的,是对所学课程知识较为系统的应用。

由于汇编语言编程相对其他语言编程比较复杂,因此,在设计上应把重点放在程序的功能实现上,不要太在意程序的结构和显示界面的设计。

不要局限于题目所规定的要求,可以灵活裁减,设计出功能更完善程序。

另外,也可以自己设计题目,同时,提出详细的功能描述,经指导老师审查同意后也可作为课程设计的题目。

1.完成所选题目的软件设计;

2.课程设计说明书1000字(不包括程序源代码)左右。

第1次熟悉软件环境。

第2次绘制程序流程图。

第3次用编写程序。

第4次用调试运行程序。

第5次编写课程设计说明书

1.李敬兆8086/8088和arm核汇编语言程序设计中国科技大学出版社

2.沈美明,温冬婵编著IBM—PC汇编语言程序设计(第二版)清华大学出版社出版

3.沈美明,温冬婵,张赤红编著IBM—PC汇编语言程序设计实验教程清华大学出版社出版

指导教师签字

教研室主任签字

2010年12月17日

安徽理工大学课程设计(论文)成绩评定表

指导教师评语:

 

成绩:

指导教师:

年月日

摘要

本次实验我主要做的是利用汇编程序实现字符图形显示,即通过一些字符的组合显示出字或者是图形。

为了迎接2011年的到来,我编写的程序将显示2011以及笑脸这些内容。

在程序编写前,我首先对自己显示的图形进行了设计,确定了每个数字相对于前一个数字的位置,以便在编写程序的时候正确定义字符的属性,也为在显示的时候能够显示较好的效果,打下了基础。

本次实验实验的编写环境是MASM,编译、链接也是在该环境下实现的。

程序的运行我用的是DOS环境。

通过参考网上的一些原程序,我发现要编写好该程序,首先应该对BIOS的中断10熟悉,因此程序编写前,我先认真学习了该BIOS中断的有关功能。

万事开头难,一旦了解了设计此程序的原理,并在此基础上掌握相关的技术,其他的工作也就跟着展开来。

关键词:

BIOS,字符,图形,中断调用

目录

1设计目的1

2概要设计2

2.1系统总体分析2

2.2主模块框图2

3详细设计3

3.1主模块及子模块说明3

3.2各模块详细设计3

4.程序调试10

4.1运行界面分析10

4.2算法的分析10

4.3调试过程及分析10

5心得体会13

5.1设计体会13

5.2系统改进13

参考文献14

1设计目的

本次设计的目的主要是为了让大家进一步的学会汇编程序的编译,链接,执行操作。

深入了解利用汇编指令是如何实现对存储器及寄存器访问的,并在此基础上学会用汇编指令、伪指令、BIOS中断调用、DOS中断调用及子程序等实现相应的功能。

字符图形程序设计的重点在于加强学生对BIOS中断10的学习,了解该中断的相应功能,感受中断调用给汇编程序带来的方便。

 

2概要设计

2.1系统总体分析

本次程序的设计题目为字符图形显示,根据题目,我们可得出,我们所要完成的任务就是用若干个字符来组合成一个图形并在屏幕中显示。

故有以下几步:

1)定义数据段,其中包括用以显示图形的字符列表。

2)定义堆栈段。

用来在调用子程序时,保存“现场”,恢复“现场”

3)定义代码段。

代码段的地位如同计算机中的CPU,是整个程序的核心。

代码段主要包括主程序MAIN,清屏子程序CLEAR_SCREEN,画图子程序MAKE_GRAPHICS。

2.2主模块框图

该程序的主模块图如图2-1:

图2-1主要的模块框图

3详细设计

3.1主模块及子模块说明

数据段:

根据你想要显示的图形,来定义每一字符。

列表的第一项是组成该图形所需字符的个数,其以后的部分直至数据段结束定义的都是显示图形的字符,每个字符为列表的一项,每一项包含四个元素,每个元素都为字节类型,它们分别是字符的ASCII码,字符的属性、字符相对于前一个字符的纵向位置、字符相对于前一个字符的横向位置。

堆栈段:

这一段即使删除对程序的总体效果来说没有太大影响,因为系统会自动“划”出一部分空间用于堆栈。

但是为了使程序满足完整性的条件,还是应该定义了一个相对较大的堆栈。

代码段:

是整个汇编程序的核心部分,该段利用汇编指令依靠堆栈段的辅助作用对数据段中内容进行处理。

它包括三个部分:

1)主程序MAIN:

主要进行设置显示模式和退出的一般操作,其类型为FAR,因为从本质上来说,一个汇编程序的运行是利用DOS的段间调用主程序实现的;

2)清屏子程序CLEAR_SCREEN:

为了能够使图形很好的显示在窗口中,必须保持显示图形的屏幕在显示图形之前是没有其他的符号存在的,利用清屏子程序可以将显示图形前的操作遗留的痕迹清理掉,保证屏幕的整洁;

3)画图子程序MAKE_GRAPHICS,这个程序根据数据段的字符列表,利用BIOS中断10的2号功能、0F功能及9号功能将其中定义的字符一个个的显示在屏幕上。

3.2各模块详细设计

1)程序有清屏子程序如图3-1:

 

图3-1清屏子程序流程图

画图子程序如图3-2:

 

图3-2画图子程序流程图

 

图3-3主程序流程图

2)程序的源代码如下:

DATASEGMENT

DB1DB95;定义字符列表,各字符

DB05H,14H,0,0;各参数字符ASCII码,字符属性,纵坐标,横坐标

DB05H,14H,0,1

DB05H,14H,1,0

DATAENDS

STACKSEGMENT

DB2000DUP(?

STACKENDS

CODESEGMENT

ASSUMECS:

CODE,DS:

DATA,SS:

STACK

MAINPROCFAR

PUSHDS

XORAX,AX

PUSHAX

MOVAX,DATA

MOVDS,AX

MOVAH,0

MOVAL,00;显示方式的定义,0强调的是背景是黑白的

INT10H

CALLCLEAR_SCREEN;调用清屏子程序

LEADI,DB1

MOVDH,10;光标所在位置

MOVDL,2;颜色

CALLMAKE_GRAPHICS;画图子程序

MOVAH,8;键盘输入

INT21H

CMPAL,71H;判断是否为Q

JZEXIT

JBNEXT

NEXT:

CMPAL,51H;Q

JZEXIT

MAINENDP

CLEAR_SCREENPROCNEAR

PUSHAX

PUSHBX

PUSHCX

PUSHDX

MOVAH,6

MOVAL,0

MOVCH,0

MOVCL,0

MOVDH,120

MOVDL,200

MOVBH,7;空白区域的缺省属性

INT10H

POPDX

POPCX

POPBX

POPAX

RET

CLEAR_SCREENENDP

MAKE_GRAPHICSPROCNEAR;画图子程序

PUSHAX

PUSHBX

PUSHCX

PUSHDX

PUSHDI

MOVAH,0FH;显示器的状态,入口参数AH,出口参数:

AL=显示方式AH=屏幕字符列数,BH=页码

INT10H

SUBCH,CH

MOVCL,[DI]

INCDI

AGAIN:

ADDDH,[DI+2]

ADDDL,[DI+3]

MOVAH,2;设置光标的位置,入口参数:

AH=02H,BH=页码,DH,DL列行坐标

INT10H

MOVAL,[DI]

MOVBL,[DI+1]

PUSHCX

MOVCX,1

MOVAH,09;在当前光标处显示属性字符,入口:

AH=09H,AL=显示的字符

;BL=字符的属性,CX=重复输出的次数

INT10H

POPCX

ADDDI,4

LOOPAGAIN

POPDI

POPDX

POPCX

POPBX

POPAX

RET

MAKE_GRAPHICSENDP

EXIT:

MOVAH,4CH

INT21H

CODEENDS

ENDMAIN

3)对程序进行分析如下:

再调用中断的时候,中断的功能号总是置于AH寄存器中。

同时,为了实现相应的功能,应该在调用中断之前将相应的入口参数放于默认的寄存器中。

本次实验中,所用到的BIOS中断有以下几种:

在主程序设计之初对显示模式的定义利用了其中的0号功能现对它的描述如下:

功能号:

00H

功能:

设置显示模式

入口参数:

AH=00H

AL=显示模式

显示模式的列表为:

显示模式显示模式属性

00H40*2516色文本

01H40*2516色文本

02H80*25单色字符显示方式

03H4色彩色字符显示方式

...

程序中,我将AL的值设为02表示在图形显示时,我所采用的模式是80*25的单色文本字符显示模式。

在清屏子程序中,调用的中断有:

功能号:

06H

功能:

初始化屏幕或滚屏

入口参数:

AH=06H——向上滚屏

AL=滚动的函数

BH=空白区域的缺省

(CH、CL)=窗口的左上角位置(Y坐标,X坐标)

(DH、DL)=窗口的左上角位置(Y坐标,X坐标)

出口参数:

利用该功能,设置AL的值为0(清窗口),BH的值为7即00000111,设置空白区域的属性与前景色一致,(CH、CL)=(0,0),(DH、DL)=(79,24)即图形能够显示在这个区域之内。

AH=06/07都可以起到清屏的作用,不同的是,前者是向上滚屏,后者是向下滚屏,即06H表示清屏时从下向上清理,07H表示清屏时从上向下清理。

画图子程序中用到的BIOS的10号中断:

功能号:

0FH

功能:

读取显示器模式

入口参数:

AH=0FH

出口参数:

AH=屏幕字符的列数

AL=显示模式(参见功能00H中的说明)

BH=页码

功能号:

02H

功能:

用文本坐标下设置光标位置

入口参数:

AH=02H

BH=显示页码

DH=行(Y坐标)

DL=列(X坐标)

出口参数:

功能号:

09H

功能:

在当前光标处按指定属性显示字符

入口参数:

AH=09H

AL=字符

BH=显示页码

BL=属性(文本模式)或颜色(图形模式)

CX=重复输出字符的次数

出口参数:

三个功能调用依次为后者的基础,0F功能的出口参数,是2号功能的入口参数,只有设定好了光标的位置,才能显示对应的字符,最终通过不断的循环调用(LOOPAGAIN),即将所有的字符均显示出来了。

得到效果图后,返回到主程序,主程序通过键盘的输入,判定是否返回DOS界面。

首先判定输入的字符是否为Q,若不是则再判定输入的字符是不是q,若都不是怎什么也不做,若是其中的一个值则返回DOS界面中。

4.程序调试

4.1运行界面分析

本程序我所使用的运行界面为DEBUG,如图4-1:

 

图4-1DEBUG运行界面

利用DEBUG进行汇编,对初学者来说比较容易,只要进入.ASM文件经编译链接后产生的.EXE文件的目录下,利用命令debugxx.exe即可对目标文件进行汇编、反汇编等操作,DEBUG作为调试程序有很多的指令,该此程序设计我所用到的主要是反汇编命令U、运行指令G以及退出指令Q。

U(Unassemble)对指令进行反汇编,后可带参数也可不带。

指令的地址以十六进制的形式和汇编的助记符一起显示出来。

可以使用Uxxxx:

xxxx命令从某一指定的位置开始反汇编。

如果不加参数,将显示至屏幕满为止。

它的默认段地址包含于CS寄存器中。

G(go)也称转移命令,加参数时用来执行正在调试的程序,当执行到指定的地址时停止,并显示寄存器和下一条要执行的命令。

不加参数时,用于执行正在调试的没有断点的程序,起始地址默认为DS:

0000,程序运行结束,DEBUG显示“Programterminatednormally”本次设计运用的就是不带参数的GO命令来执行程序。

DEBUG除了能够汇编程序外,还可以用来检查和修改内存位置,载入存储和执行程序、以及检查和修改寄存器。

总的来说,DEBUG对于汇编的初学者绝对是强有力的工具。

4.2算法的分析

本次设计的思想便是利用字符来拼凑一个图形,调用画图子程序循环的输出不同位置的字符,直到所需的所有字符输出完,图形也就显示出来了。

4.3调试过程及分析

1)编译,链接,如图4-2:

 

图4-2编辑器界面

点击该编辑器中的C(compiler),弹出对话框,如图4-3:

 

图4-3编译对话框

点击确定,若没有错误,菜单栏中的L(Link)会由灰色,变成红色,点击该键,弹出如下对话框,如图4-4:

 

图4-4链接对话框

链接成功后点击R(Run)即可进入DOS界面(与文件所在的目录一致),如图4-5:

 

图4-5DOS界面

在光标闪动处输入debug0.exe后,进入debug,再利用go命令执行程序。

程序的结果如图4-6:

 

图4-6程序运行结果

按Q后可以退出,返回DOS,效果如图4-7:

 

图4-7按Q(q)后的显示

5心得体会

5.1设计体会

当拿到这个题目的瞬间,让我感到很迷茫。

以前所做的汇编实验,多是对存储器,寄存器的内容进行处理。

而这次字符图形显示,看着老师给的提示,我也不是很明白这个程序的最终成果到底是什么样子的。

定义字符列表是干什么用的呢?

以前从没有碰到过关于定义列表的东西啊?

带着这些疑问,我先是问了老师,老师说用很多个字符拼成一个图形,所以要定义一个字符列表来存放组成图形的每个字符,及其相应的属性。

有了一个大概的框架,了解了程序设计的目的,我着手就容易多。

利用网络资源我搜到了一个显示“中国北京”的源程序,当时放心多了,有了可以借鉴的东西就仿佛有了先人的指导。

打开了源程序,懵了,看不懂!

BIOS中断调用,以前接触少的可怜。

于是我又在网上看了一些关于BIOS中断10的相关功能,一边看程序,一边看网上的解释,但是对各种各样的显示模式,及显示相关的专有名词不是很了解,比如06H号功能的向上滚屏就弄的我一头雾水,又去请教了老师。

在老师的举例分析下,总算有了一定的认识,了解了它是怎么工作的。

但老师提醒我,不要把重心过多的放在外在的显示上,要关注字符是如何显示的。

按照老师的指示,我先泛泛的看了和显示相关的内容,大概有了一个概念,然后把主要精力放在了画图子程序上,其实我觉得画图子程序就是三个中断调用的配合,外加一个循环。

仔细分析各个功能的入口出口参数,很快网上download的程序就看明白了。

万事开头难,有的东西你一旦有了思路,不断思考,并按此循序渐进的展开最终定能获得成功,当你回过头来看看自己走过的路时,你会为自己而感到自豪,会有一种由衷的满足感。

5.2系统改进

虽然我的程序基本满足了本次课程设计的要求,但其中依然有很多需要改进的地方。

比如我选择图形的显示模式是单字符显示方式,这比320*200的四色图形显示方式简单的多,降低了程序的要求,省掉了对屏幕色彩及调色板的设置。

同时,由于最后以Q(q)键结束程序,所以不需要延迟程序,因此在程序中将其省略。

但编写延迟子程序的方法和思想应该长期保存在自己的记忆中。

 

参考文献

[1]李敬兆.《8086/8088和arm核汇编语言程序设计》.合肥:

中国科技大学出版社

[2]沈美明,温冬婵编著.《IBM—PC汇编语言程序设计(第二版)》.北京:

清华大学出版社出版

[3]沈美明,温冬婵,张赤红编著.《IBM—PC汇编语言程序设计实验教程》.北京:

清华大学出版社出版

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

当前位置:首页 > 考试认证 > 司法考试

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1