模拟霓虹灯汇编语言程序设计详解Word格式文档下载.docx
- 文档编号:18350762
- 上传时间:2022-12-15
- 格式:DOCX
- 页数:52
- 大小:443.27KB
模拟霓虹灯汇编语言程序设计详解Word格式文档下载.docx
《模拟霓虹灯汇编语言程序设计详解Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《模拟霓虹灯汇编语言程序设计详解Word格式文档下载.docx(52页珍藏版)》请在冰豆网上搜索。
文字的闪烁则是通过将颜色属性的八位二进制数的最高位置实现的。
通过比较键盘字符输入ESC来判断是否结束程序。
2方案论证
虽然整个大的程序框架很难构思,但是将程序分割成几个功能模块则可以很轻松的得出。
(1)文字显示可以使用坐标纸写点的方法,或者使用ASCIIArtStudio软件将文字的图片转换成ASCII字符画。
用坐标纸定位每个文字点的坐标工作量非常大,而且很容易算错,运用字符画软件则很轻松的提取文字的字符画格式,方便快捷,易于修改。
(2)在检测退出模块中必须先检测键盘是否有输入,否则当程序运行到这的时候将会暂停等待键盘输入之后才会继续运行,无法实现霓虹灯的闪烁功能。
3程序原理分析
3.1程序中的字体属性定义
本程序采用的是彩色字符显示,在显示彩色文本时,属性字节能够选择前景和背景的颜色。
每个字符可以选择16种颜色中的一种,背景色有8种颜色可以选择。
图3-1是16色文本方式显示的属性字节。
表3-1列出了16色字符方式颜色的组合。
BL
R
G
B
I
图3-116色方式下的属性字节
表3-116种颜色的组合
颜色
IRGB
黑
0000
灰
1000
红
0100
浅红
1100
蓝
0001
浅蓝
1001
品红
0101
浅品红
1101
绿
0010
浅绿
1010
棕
0110
黄
1110
青
0011
浅青
1011
灰白
0111
白
1111
3.2程序中用到的BIOS内的中断功能
(1)02H号功能调用
功能:
用文本坐标下设置光标位置
入口参数:
AH=02H
BH=显示页码
DH=行(Y坐标)
DL=列(X坐标)
出口参数:
无
(2)08H号功能调用
读光标处的字符及其属性
AH=08H
AH=属性
AL=字符
(3)09H号功能调用
在当前光标处按指定属性显示字符
AH=09H
BL=属性(文本模式)或颜色(图形模式)
CX=重复输出字符的次数
(4)0FH号功能调用
读取显示器模式
AH=0FH
AH=屏幕字符的列数
AL=显示模式
BH=页码
3.3程序中用到的DOS功能调用
(1)01H号功能调用
从键盘输入一个字符
输入参数:
输出参数:
AL=ASCII码
(2)0BH号功能调用
检查标准输入设备上是否有字符可读,该输入操作可被重定向
AH=0BH
AL=00H——无字符可读;
FFH——有字符可读
(3)4CH号功能调用
返回操作系统4CH
调用:
MOVAH,4CH
INT21H
4主要模块与程序设计
4.1程序流程图
4.1.1主程序流程图
主程序流程图如下:
图4-1主程序流程图
4.1.2子程序流程图
本程序显示的文字为英文字母,字母都用不同颜色的版本先写一次,然后竖形条纹扫过,条纹扫过时字母被覆盖,条纹扫过后开始显示颜色变化后的字母,然后条纹再扫过,一直这样循环。
因此,子程序有文字显示子程序、竖形条纹显示子程序、擦除子程序,对应的流程图分别如图4-2、4-3、4-4所示。
文字显示子程序流程图如图4-2所示。
图4-2文字显示子程序流程图
竖形条纹显示子程序流程图如图4-3所示。
图4-3竖形条纹显示子程序流程图
擦除子程序流程图如图4-4所示。
图4-4擦除子程序流程图
4.2文字显示模块
如何使用ASCII码显示文字是这次课程设计的关键之处,为了达到霓虹灯的效果,我采用各种字符组合来组成文字的形状,为了达到更美观的效果,在这里,借助一个字符画转换软件,名字为ASCIIArtStudio,该软件是用来创建ASCII字符画的软件,可以像使用画笔一样创建ASCII字符画。
转换完成的文字效果如图4-5所示。
图4-5转换为字符画的文字
对应显示屏幕上的每个字符,在存储器中又连续的两个字节表示,一个字节保存ASCII码,另一个字节保存字符的属性。
在屏幕上处理字母、数字以及一些字符图形称为文本方式。
在文本方式下,属性字节对单色显示和彩色显示都是有效的。
在彩色显示器里,如CGA、EGA、VGA等,常用一个字节(8个位)来表示文字颜色和背景颜色,通常以第0~3位表示文字本身颜色;
第4~6位表示背景颜色,背景颜色只有上表左栏的8种而已;
第7个位,表示是否闪烁,0表示不闪烁,1表示闪烁。
每个字符由四种属性组成,第一项为字符种类,如61h代表字符“a”,第二项为字符的颜色,如Oah代表绿色,第三项为字符相对于前一个字符的行坐标,第四项为该字符对于上一个字符的列坐标,这样只要定义了第一个字符在屏幕中的位置,那么就能将整个文字显示出来。
例如:
Adb147
db'
q'
04h,0,8
N'
04h,0,1
y'
04h,1,-2
这段程序是字母A的位形图程序的一部分。
其中'
为A的第一个点转换为ASCII码的值,在屏幕上会显示q;
04h为其颜色属性,且为红色不闪烁;
(0,8)为这个点的坐标,第一个为行坐标,第二个为列坐标。
这个点也是字母A组成点的基准坐标,其余点的设置与此点类似。
,向上则行自减1,向下则行自增1,向左则列自减1,向右则列自增1。
每写出一个点后,该点的坐标变回基准坐标(0,0)。
本程序中写点是按照从左到右、从上到下的顺序写的,直至写完所有的点。
显示字母的的过程如下面程序段所示,其中前三句是将字母位型图的地址送给寄存器,dh和dl分别表示字母的起始的第一个点在屏幕上的行列的坐标,call指令用于子程序调用,分别调用move_shape1和Amust_2子程序,进行读点和写点。
leadi,A
movdh,3
movdl,4
callmove_shape1
callAmust_2
在move_shape1子程序中,char_cntl是指字符,pointer1表示颜色,line_on1为行坐标,col_on1为列坐标。
写点的程序在子程序Amust_2,Amust_21中类似,程序段如下:
movcx,char_cnt1
movdi,pointer1
movdh,line_on1
movdl,col_on1
Aplot_next0:
adddh,[di+2]
adddl,[di+3]
movah,2
int10h
moval,[di]
movbl,[di+1]
pushcx
movcx,1
movah,09
popcx
adddi,4
应当说明的是,程序中cx寄存器入栈又出栈。
入栈是为了保存cx中的数值,将寄存器cx空出来,作为计数用,随即出栈的目的是重新将已经保存的cx中的值保存到cx中,作为循环次数用。
程序中到int10h为止都是写点的程序。
adddi,4是为写下一个点做准备,直至写完。
4.3颜色变化模块
颜色变化功能实际上就是将文字用其他颜色重新写一遍,因此可实现文字颜色变化,本程序用的是重新定义数据段的方法,将每个字符重新定义,还有一种方法是使用函数,将每个字符代表字符颜色的部分同时加减一个数,便可实现变色功能。
4.4竖形条纹显示模块
数据段中竖形条纹只定义了6个点,为了能够有足够的宽度将汉字覆盖,因此要将db40h,0ah,1,0与db02ah,0ceh,-1,0两个点重复写19次,形成够宽的条纹。
主程序中Acount0先定义为了19,写完19个“@”后,Acount0重新赋值19,再将02ah对应的字符“*”写19次,构成完整的竖形条纹。
模块的核心算法程序如下:
cmpal,40h
jeAexitx0
cmpal,02ah
jmpAexitx1
Aexitx0:
decAcount0
jneAplot_next
movAcount0,19
4.5竖形条纹移动与清屏模块
在每次写完竖形条纹以后,由deccol_on1实现起始点列坐标的的自减1,从而实现竖形条纹的从右向左移动。
模块的核心程序如下:
cmpdl,2
jeAleft
movah,8
cmpal,40h
jeAexitx2
jmpAexitx3
Aexitx2:
jneAexitx3
Aexitx3:
cmpAcount1,1
jeAexit0
moval,'
'
movbl,03h
jmpAexit7
Aexit0:
movbl,0
Aexit7:
movah,9
cmpAcount0,19
jneAerase_next
loopAerase_next
deccol_on1
屏幕的擦除是通过竖形条纹与“空格”的比较,相同则不变,不同则将次字符改为“空格”实现的。
4.6按ESC退出模块
该设计要求在程序运行过程中,按下ESC键能够推出程序,因此在程序中加入了退出功能模块,首先判断有没有字符输入,没有就跳转到Again,若检测到字符输入,再把输入字符与ESC相比较,若不同,还是跳转到Again执行循环,若是ESC,则执行退出命令,返回DOS。
checkprocnear
pushax
movah,0bh
int21h
cmpal,0
jeback
movah,08h
cmpal,1bh
jneback
popax
movah,4ch
back:
popax
ret
checkendp
4.7延迟功能模块
若显示程序没有了延时功能模块,那么所有的显示内容都将一闪而过,根本看不清,因此,我们需要在程序中加入延迟程序,除此之外延迟程序可以用来控制文字显示的快慢以及刷屏的快慢速度,这样文字就会像打字机一样一行一行的显示出来,非常漂亮,刷屏快一些则会有闪烁的效果出现。
以下是延迟模块的子程序。
dly_qrtrprocnear
pushdx
movdx,250
dll:
movcx,65530
dl2:
loopdl2
decdx
jnzdll
popdx
dly_qrtrendp
5程序调试
5.1调试工具
使用汇编语言调试器DEBUG进行调试,DEBUG程序是专门为汇编语言设计的一种调试工具。
它能给DOS提供有力的纠错、跟踪和运行功能,并能检查系统的各个数据。
该工具可以通过单步、设置断点等方法微程序设计者提供一种有效的调试手段。
5.2调试过程
本程序在调试过程中,遇到了很多自己思考不周的问题。
第一,在没有输入任何字符的情况下,程序运行到字符检测点停了下来,必须输入一个字符让程序继续或结束。
经过检查原来是没有设置判断是否有字符输入的程序,修改后解决了;
第二,输入的字符非ESC时,程序也会结束。
在和ESC比较的程序段之后、过程终止程序段之前加上jmpAgain1语句,即正常了。
第三,在使用条件转移指令jz时,发现不能生成obj文件,经检查发现jz与要调用的程序距离太远,把二者距离拉近后问题得到解决。
第四,写好程序运行时发现屏幕上显示的文字严重错位,检查数据段发现有一个点没有定义,重新定义后显示了正确的字符。
第五,写好程序运行之后文字能够正常显示,但是显示完一个字母之后还会继续显示乱码,检查数据区发现是将db'
04h,0,1这类的数据的个数定义的超出范围,适当缩小范围则可避免乱码的出现。
5.3结果分析
先显示第一种版本的“APTX”。
然后竖形条纹从右向左扫过,将屏幕清空,开始以同样方式显示颜色变化之后的“APTX”。
最后,同样竖形条纹从右向左扫过,清空屏幕,屏幕被清空后重新开始循环上述过程,直到输入ESC程序结束。
结束语
通过一周多的课程设计,我觉得单单掌握书本上的知识是不够的,还要灵活思考,善于变换,将书本的知识用在实际的地方,这样才能找到最优的设计,打到事半功倍的效果。
拿到这个题目的时候,面对“自己定义图案,自己选择颜色”这样宽的要求,我显得无从下手,但是经过细细分析之后,我选到了霓虹灯要显示的文字和色彩,并且明确了设计思路和设计的流程。
在课程设计中,我遇到了许多的问题,通过请教学长,和组员之间相互交流,最终都得到了解决,并且将我脑子里想的霓虹灯效果通过编程实现出来了。
在课程设计中,我还发现了自己的不足之处,那就是对以前所学的知识掌握的不够深刻,通过这次设计,也达到了温故而知新的效果。
我通过在网上找资料,在图书馆查资料,找到了许许多多的信息,但是这些都不是自己的,后来我经过努力分析与钻研将他们都变成了自己的知识。
课程设计结束了,不代表学习就结束了,而是通过课程设计让我在以后的学习中生活中应用所学的一丁点知识创造出无限的奇迹,使结果最优化,从而积累自身对待一件任务的态度,自信。
参考文献
[1]周佩玲、彭虎等著.微机原理与接口技术(基于16位机).北京:
电子工业出版社,2007.6
[2]艾德才编著.Pentium/80486实用汇编语言程序设计.北京:
高等教育出版社,2000
[3]谭浩强编著.计算机硬件技术基础.北京:
电子工业出版社,2004
[4]李继灿编著.新编16-32位微型计算机原理及应用.北京:
清华大学出版社,1997
[5]朱定华.微机原理、汇编与接口技术学习指导.北京:
清华大学出版社,2004.7
附录源程序代码
;
--<
<
***************>
>
DATA_SEGMENT<
*************>
--
DATA_SEGMENT部分为定义数据段
datasegment
---A--**************************--A---
Adb147;
红色的A的位形图
db2dup('
0'
04h,0,1)
&
'
04h,0,1
04h,1,-3
M'
E'
j'
04h,1,-4
$'
4'
#'
04h,1,-5
db3dup('
@'
Q'
04h,1,-6
]'
04h,1,-7
db5dup('
04h,1,-8
8'
r'
04h,1,-9
db7dup('
04h,1,-10
6'
04h,1,-11
db8dup('
~'
04h,1,-12
F'
db9dup('
R'
L'
+'
04h,1,-15
*'
-'
db6dup('
m'
A1db147;
绿色的A的位形图
02h,0,8
02h,0,1
02h,1,-2
02h,0,1)
02h,0,1
02h,1,-3
02h,1,-4
02h,1,-5
02h,1,-6
02h,1,-7
02h,1,-8
02h,1,-9
02h,1,-10
6
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 模拟 霓虹灯 汇编语言 程序设计 详解
![提示](https://static.bdocx.com/images/bang_tan.gif)