字符图形汇编课设.docx
《字符图形汇编课设.docx》由会员分享,可在线阅读,更多相关《字符图形汇编课设.docx(16页珍藏版)》请在冰豆网上搜索。
![字符图形汇编课设.docx](https://file1.bdocx.com/fileroot1/2023-1/28/7a24bab6-beaf-4de0-b32f-0fbb8b0bd371/7a24bab6-beaf-4de0-b32f-0fbb8b0bd3711.gif)
字符图形汇编课设
课程设计任务书
学生姓名:
专业班级:
计算机班
指导教师:
周银良工作单位:
计算机科学与技术学院
题目:
字符图形程序的设计与实现
初始条件:
理论:
完成了《汇编语言程序设计》课程,对微机系统结构和80系列指令系统有了较深入的理解,已掌握了汇编语言程序设计的基本方法和技巧。
实践:
完成了《汇编语言程序设计》的四个实验,熟悉汇编语言程序的设计环境并掌握汇编语言程序的调试方法。
要求完成的主要任务:
(包括课程设计工作量及其技术要求,以及说明书撰写等具体要求)
理解计算机系统中图形显示的工作原理,掌握文本方式下BIOS对图形显示的控制方法。
具体的设计任务及要求:
1)制作一个图形元素表,表中将所需的各种字符图形编上号码,并用存储器映射法将其显示在屏幕的左上部分;
2)将光标定位在屏幕的右半部分画图区,上、下、左、右光标控制键控制光标在四个方向的移动,不显示其轨迹,同时要控制光标位置不超出画图区的边界;
3)当按动某一数字键时,在光标位置处显示出相应编号的字符图形,然后移动光标,再显示下一个图形,最后绘出一幅有字符组成的图形。
4)按动ESC键,退出程序,返回DOS。
在完成设计任务后,按要求撰写课程设计说明书;对课程设计说明书的具体要求请见课程设计指导书。
阅读资料:
1)《IBM—PC汇编语言程序设计实验教程》3.2节
2)《IBM—PC汇编语言程序设计(第2版)》9.2节,10.1节,10.2节,10.3节
时间安排:
设计安排一周:
周1、周2:
完成系统分析及设计。
周3、周4:
完成程序调试,和验收。
周5:
撰写课程设计报告。
指导教师签名:
年月日
系主任(或责任教师)签名:
年月日
字符图形程序的设计与实现
1设计内容及要求:
1.1设计内容
(1)制作一个图形元素表,表中将所需的各种字符图形编上号码,并用存储器映射法将其显示在屏幕的左上部分。
(2)将光标定位在屏幕的右半部分画图区,上、下、左、右光标控制键控制光标在四个方向的移动,不显示其轨迹,同时要控制光标位置不超出画图区的边界。
(3)当按动某一数字键时,在光标位置处显示出相应编号的字符图形,然后移动光标,再显示下一个图形,最后绘出一幅有字符组成的图形。
(4)按动ESC键,退出程序,返回DOS。
1.2设计要求
理解计算机系统中图形显示的工作原理,掌握文本方式下BIOS对图形显示的控制方法。
2设计中使用的关键技术和方法
2.1BIOS键盘中断(INT16H)
类型16的中断提供了基本的键盘操作,它的中断处理程序包含3个不同的功能,分别根据AH寄存器的内容来选择。
这里我使用了其中的1个功能,如下表:
AH
功能
返回参数
00
从键盘读一个字符
AL=字符码,AH=扫描码
2.2BIOS显示中断(INT10H)
这里我使用了BIOS显示中断的4个功能,如下表:
AH
功能
调用参数
返回参数/注释
02
置光标位置
BH=页号,DH=行,DL=列
06
屏幕初始化或上卷
AL=上卷行数,AL=0全屏幕为空白,
BH=卷入行属性,CH/CL=左上角的行/列号
DH/DL=右下角的行/列号
09
在光标位置显示字符及属性
BH=显示页,AL=字符,BL=字符,
CX=字符重复次数
0A
在光标位置显示字符
BH=显示页,AL=字符,CX=字符重复次数
2.3DOS系统功能调用(INT21H)
这里我使用了DOS系统功能调用的一种功能,如下表:
AH
功能
调用参数
返回参数
09
显示字符串
DS:
DX=串首地址,字符串以‘$’结尾
2.4其它方法与技术
本次课程设计中还用到子程序设计。
3设计方案说明:
3.1模块层次图
3.2各模块说明
3.2.1输入
功能为从键盘读字符。
调用参数AH=功能类型。
返回参数AL=输入字符的ASCII码,AH=输入字符的扫描码。
3.2.2显示
功能在DOS文本方式显示字符。
使用DOS显示中断(INT10H),调用参数AH=功能类型,BH=显示的页号,AL=要显示的字符,BL=显示字符的属性(颜色等),CX=字符的重复次数。
无返回参数。
3.2.3清屏
功能为清除屏幕内的内容。
调用参数AH=功能类型,AL=0初始化窗口,BH=卷入行属性,CH/CL=要清屏区域左上角的行/列号,DH/DL=要清屏区域右下角的行/列号。
无返回参数。
3.3程序流程图
3.4主要数据结构的定义和说明
3.4.1数组
定义储存字符表:
字符数组:
array1db0,1,2,3,4,5,6,7,8,9
3.4.2字符串
定义字符串数组储存字符串:
字符串:
array2db'pleasepayattention:
press"ESC"toexit&press"del"toclearscreen','$'
array3db'CHARACTER:
','$'
array4db'COLOR:
','$'
3.5程序界面描述
此程序设计界面为一个25×80的窗口,窗口中设置一个边界,分离字符集和画图区域,左边的上半部分显示按键及其对应的字符,下半部分显示按键及其对应的颜色,右边区域用于画图。
详细如下图:
注:
对应颜色为:
蓝色(0001)、绿色(0010)、青色(0011)、红色(0100)、品红(0101)、棕色(0110)、灰白(0111)、灰色(1000)、浅蓝色(1001)
图3“字符处理系统”界面截图
4测试及评估:
4.1测试结果
通过键盘输入0-9来画字符,通过输入←,↑,→,↓来控制画图光标,通过键盘输入a-i来控制显示字符的颜色,输入‘del’键来清除画图区域,输入“ESC”则退出,结果如下图:
其中,控制光标对应的扫描码为:
↑(48H)、←(4BH)、→(4DH)、↓(50)
图4“字符处理系统”运行结果截图
5心得体会:
为期一周的课程设计很快结束了,在设计的过程中,遇到了一些难题,也获得了很大的收获,做如下小结:
首先,“充实的准备”——当我接到课题时,做了认真的分析。
我的课程题目为:
字符图形程序的设计与实现,其中的一些相关知识在课上是老师没有讲过的,所以要先做好准备工作。
根据课程任务书的要求,阅读了相关的资料:
了解到了如何使用←,↑,→,↓四个键,及其相应的扫描码的使用;认识了DOS中断中各个寄存器的使用和含义;理解了BIOS设置显示的方式;及图形程序设计的方法。
第二,根据题目要求,我做了认真的分析,根据相应的要求先画流程图,这样可以有一个清晰的思路,在编写程序的过程中就避免因为头脑混乱而导致错误,同时也方便了程序的设计和编写。
第三,在设计中也遇到了一些问题,像在进行界面设计的时候,设计区域边界和区域内布局比较难确定,设计不好就影响界面的美观;编码过程中光标位置的重置容易忘记,是在调试过程中才发现出来的;编码过长,内存占用比较多。
第四,因为遇到了这些问题,也带来了不少收获,在解决问题和请教同学的过程中,使我又有了新的认识和理解,并改正了自己在理解上的一些错误,使自己又得到了提高和进步。
总之,通过此次实验,我对汇编语言程序设计有了进一步的了解。
对于DOS中断和BIOS键盘中断、BIOS显示中断,也有了更深层次的了解,对于其功能调用有了一定的掌握。
这次实验还让我熟悉了分支程序、子程序设计的知识。
通过对图形程序设计的实现,也使我对汇编语言产生了更浓的兴趣。
今后在课余时间,可以多多阅读相关的书籍,来扩展自己的知识面。
6参考资料
《IBM-PC汇编语言程序设计(第2版)》,作者:
沈美明、温冬蝉,清华大学出版社2001年8月出版。
《IBM-PC汇编语言程序设计实验教程》,作者:
沈美明、温冬蝉、张赤红,清华大学出版社
附录:
源程序代码:
datasegment
array1db0,1,2,3,4,5,6,7,8,9
rowdb0
coldb0
colordb0fh
array2db'pleasepayattention:
press"ESC"toexit&press"del"toclearscreen','$'
array3db'CHARACTER:
','$'
array4db'COLOR:
','$'
dataends
prognamsegment
assumecs:
prognam,ds:
data
mainprocfar
start:
pushds
movax,0
pushax
movax,data
movds,ax
leadx,array2
movah,9
int21h
movrow,1
movcol,24
movbx,26
l0:
callreset
moval,7ch
movbh,0
movcx,1
movah,0ah
int10h
incrow
decbx
jnzl0
movrow,2
movcol,0
movdi,0
callreset
leadx,array3
movah,9
int21h
movrow,3
movcol,0
l1:
callreset
movax,di
addal,30h
movbh,0
movcx,1
movah,0ah
int10h
inccol
callreset
movbh,0
movcx,1
movah,0ah
moval,array1[di]
int10h
incdi
cmpdi,9
jal2
addcol,6
cmpcol,22
jbl1
addrow,2
movcol,0
JMPl1
l2:
addrow,4
movcol,0
callreset
leadx,array4
movah,9
int21h
incrow
movcol,0
movdi,1
l3:
callreset
movbx,di
addbl,60h
movbh,0
movcx,1
movah,0ah
moval,bl
int10h
inccol
callreset
subbl,60h
movbh,0
movcx,1
movah,9
moval,0dbh
int10h
incdi
cmpdi,9
jal4
addcol,6
cmpcol,22
jbl3
addrow,2
movcol,0
JMPl3
l4:
movrow,1
movcol,26
callreset
draw:
movah,0
int16h
cmpah,48h
jeup
cmpah,50h
jedown
cmpah,4dh
jeright
cmpah,4bh
jeleft
cmpah,53h
jel5
cmpah,01h
jnznum
ret
l5:
callclear
movrow,1
movcol,26
callreset
jmpdraw
num:
cmpal,30h
jnbl6
jmpdraw
l6:
cmpal,39h
jal7
andax,00ffh
subax,30h
movdi,ax
moval,array1[di]
movbh,0
movcx,1
movbl,color
movah,09h
int10h
jmpdraw
l7:
cmpal,61h
jbl8
cmpal,69h
jal8
subal,60h
movcolor,al
l8:
jmpdraw
up:
decrow
jzup1
jmpl9
up1:
incrow
jmpl9
down:
incrow
cmprow,25
jadown1
jmpl9
down1:
decrow
jmpl9
left:
deccol
cmpcol,26
jbleft1
jmpl9
left1:
inccol
jmpl9
right:
inccol
cmpcol,78
jaright1
jmpl9
right1:
deccol
l9:
callreset
jmpdraw
mainendp
resetprocnear
movah,2
movbh,0
movdh,row
movdl,col
int10h
ret
resetendp
clearprocnear
pushax
pushbx
pushcx
pushdx
movah,6
moval,0
movch,1
movcl,26
movdh,25
movdl,79
movbh,7
int10h
popdx
popcx
popbx
popax
ret
clearendp
prognamends
endstart
本科生课程设计成绩评定表
班级:
计算机班 姓名:
学号:
序号
评分项目
满分
实得分
1
学习态度认真、遵守纪律
10
2
设计分析合理性
10
3
设计方案正确性、可行性、创造性
20
4
设计结果正确性
40
5
设计报告的规范性
10
6
设计验收
10
总得分/等级
评语:
注:
最终成绩以五级分制记。
优(90-100分)、良(80-89分)、中(70-79分)、
及格(60-69分)、60分以下为不及格
指导教师签名:
201年 月 日