霓虹灯显示程序设计详解.docx

上传人:b****2 文档编号:2623606 上传时间:2023-05-04 格式:DOCX 页数:37 大小:468.12KB
下载 相关 举报
霓虹灯显示程序设计详解.docx_第1页
第1页 / 共37页
霓虹灯显示程序设计详解.docx_第2页
第2页 / 共37页
霓虹灯显示程序设计详解.docx_第3页
第3页 / 共37页
霓虹灯显示程序设计详解.docx_第4页
第4页 / 共37页
霓虹灯显示程序设计详解.docx_第5页
第5页 / 共37页
霓虹灯显示程序设计详解.docx_第6页
第6页 / 共37页
霓虹灯显示程序设计详解.docx_第7页
第7页 / 共37页
霓虹灯显示程序设计详解.docx_第8页
第8页 / 共37页
霓虹灯显示程序设计详解.docx_第9页
第9页 / 共37页
霓虹灯显示程序设计详解.docx_第10页
第10页 / 共37页
霓虹灯显示程序设计详解.docx_第11页
第11页 / 共37页
霓虹灯显示程序设计详解.docx_第12页
第12页 / 共37页
霓虹灯显示程序设计详解.docx_第13页
第13页 / 共37页
霓虹灯显示程序设计详解.docx_第14页
第14页 / 共37页
霓虹灯显示程序设计详解.docx_第15页
第15页 / 共37页
霓虹灯显示程序设计详解.docx_第16页
第16页 / 共37页
霓虹灯显示程序设计详解.docx_第17页
第17页 / 共37页
霓虹灯显示程序设计详解.docx_第18页
第18页 / 共37页
霓虹灯显示程序设计详解.docx_第19页
第19页 / 共37页
霓虹灯显示程序设计详解.docx_第20页
第20页 / 共37页
亲,该文档总共37页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

霓虹灯显示程序设计详解.docx

《霓虹灯显示程序设计详解.docx》由会员分享,可在线阅读,更多相关《霓虹灯显示程序设计详解.docx(37页珍藏版)》请在冰点文库上搜索。

霓虹灯显示程序设计详解.docx

霓虹灯显示程序设计详解

要求完成的主要任务:

(包括课程设计工作量及其技术要求,以及说明书撰写等具体要求)

1.用汇编语言编写一个霓虹灯的模拟显示程序;

2.在屏幕上动态显示”新年快乐”,按蓝—绿—黄---红---白闪烁变化,按“q”键退出;

 

时间安排:

1月3日-----1月5日查阅资料及方案设计

1月5日-----1月7日编程

1月7日-----1月9日调试程序

1月9日-----1月10日撰写课程设计报告

 

指导教师签名:

年月日

系主任(或责任教师)签名:

年月日

1设计内容及要求

要求完成的主要任务:

(包括课程设计工作量及其技术要求,以及说明书撰写等具体要求)

1.用汇编语言编写一个霓虹灯的模拟显示程序;

2.在屏幕上显示你的中文名字或其它文字,按某种规律闪烁变化,按“q”键退出;

3.撰写课程设计说明书。

内容包括:

摘要、目录、正文、参考文献、附录(程序清单)。

正文部分包括:

设计任务及要求、方案比较及论证、软件设计说明(软件思想,流程,源程序设计及说明等)、程序调试说明和结果分析、课程设计收获及心得体会。

 

2程序原理分析

采用系统提供的BIOS功能调用中的int10h显示功能,定义AH=0,AL=13将屏幕输出设置为320X200,256色图形方式。

利用AH=12些点功能,通过写ASCII码,来组成文字,其中ASCII码的位置可由行数和列数的二维坐标确定,由定义的区域内开始,行向下自增1,列向右自增1,逐列写ASCII码,然后编写程序段实现内存地址与屏幕坐标之间的联系。

然后采用直接往显卡的内存映射地址中写入数据,用来控制屏幕输出的颜色。

文字的闪烁同样可以通过清屏程序和擦除程序同时作用来实现。

 

3主程序流程图

程序的设计思路如下:

 

图3-1程序流程图

4程序主要模块功能分析

4.1名字显示功能模块

设计方案首先采用BIOS功能调用将屏幕输出设置为320X200,256色图形方式(vga)。

它使用了256色的调色板。

4.1.1vga简介

VGA(VideoGraphicsArray)是IBM在1987年随PS/2机一起推出的一种视频传输标准,具有分辨率高、显示速率快、颜色丰富等优点,在彩色显示器领域得到了广泛的应用。

标准的VGA显卡包含256KB的VRAM(VideoRandomAccessMemory,显存),对于8086该内存区域映射于主内存的地址区域为0x000A0000-0x000BFFFF,显然有0xBFFFF–0xA0000=0xA0000,即655360字节,或640KB。

典型地来说有以下地址:

0xA0000——EGA/VGA图形模式(64KB)

0xB0000——单色文字模式(2KB)

0xB8000——彩色文字模式和CGA相容模式(2KB)

4.1.2256色调色板

模式0x13有一个256色的调色板。

在该模式下的视频内存存储调色板的索引号。

视频设备根据内存中的索引号,在内存地址对应的屏幕位置上描绘色彩。

例如通过调色板色彩布局图知,0代表黑色,1代表蓝色,4代表红色,255代表白色,其余依次类推。

4.1.3视频显示模式设置

我们可以通过调用BIOS中断0号功能设置视频显示模式,具体的设置如下图所示:

功能:

设置显示模式

入口参数:

AH=00H

AL=显示模式

显示模式列表:

显示模式显示模式属性

00H40×2516色文本

01H40×2516色文本

02H80×2516色文本

04H320×2004色

05H320×2004色

06H640×2002色

07H80×252色文本

08H160×20016色

09H320×20016色

0AH640×2004色

0BH保留

0CH保留

0DH320×20016色

0EH640×20016色

0FH640×3502色(单色)

10H640×3504色

11H640×4802色

12H640×48016色

13H320×200256色

那么模式设置的代码可以如下编写:

movah,0

moval,13h

int10h

4.3文字显示

利用子程序plotpixel在屏幕的相应坐标上绘制规定的颜色,即可得到一定的图形。

那么绘制文字就由plotpixel子程序按照文字图形扫描得到。

;-----------------------;

;plotnameatlocation

;(x=bx,y=ax)anddl=color

;andsi=字模首地址

;-----------------------;

plotnameproc

pushax

pushcxN

pushdxY

pushbx

N

movcx,totalbyteY

lop1:

cmpbyteptrds:

[si],'_’

jnzbranch1

movdl,0

jmpgoalN

branch1:

cmpbyteptrds:

[si],'X'Y

jnzbranch2

movdl,1

图4-1文字显示程序流程

adddl,[colorchange]

图3-1程序流程图

jmpgoal

图3-1程序流程图

branch2:

incax

popbx

pushbx

jmpgoal2

goal:

callplotpixel

incbx

goal2:

incsi

looplop1

popbx

popdx

popcx

popax

ret

plotnameendp

图4-2清屏程序流程

图4-2文字显示

4.4清屏子程序

同样的道理,可以得到清屏的代码:

;---------------------------;

;clearthewholescreen

;cl=color

;---------------------------;

clrsrcproc

pushdx

movdl,cl;dx=2pixels

movdh,cl

movcx,0

xordi,di

A1:

movwordptres:

[di],dx

incdi

incdiN

inccxY

cmpcx,32000;320*200/2

jlA1Y

popdx

ret

clrsrcendp

图4-3清屏程序流程

图3-1程序流程图

图3-1程序流程图

4.5文字动画效果

利用子程序plotname的输入参数dl,可以轻松地控制绘制文字的颜色,那么使用不同颜色隔一段时间绘制同一坐标时便可以产生闪烁的效果了。

利用子程序plotname的输入参数bx,ax可以轻松地控制绘制文字的位置,那么使用不同的bx,ax值将文字描绘到不同位置,并插入清屏子程序clrscr,以及与延时程序delay相结合使用,便可以产生动画效果了。

图4-4文字的颜色变化

 

5程序调试

在WINXP操作系统下,在MFPCI98软件中编入80x86汇编程序,用MASM5.0编译,进行汇编、连接、运行操作。

对编译时出现的错误进行调试。

我在编译时容易出现遗漏对应指令的错误,如进行CALL指令调用子程序时,容易遗漏在CALL后的RET指令,导致运行时出现错误图形。

还有在调用INT10H功能时,读光标,置光标还有显示字符串指令时,对寄存器AX,BX,DX,CX,BP的数据传送应根据光标起始位的行列坐标需求来确定数据的传送,才能达到要求的图形显示效果。

 

6课程设计总结

本次课程设计要求我们用汇编语言编写一个霓虹灯的模拟显示程序,这对于我们来说有一定的考验。

首先,要实现题目要求的功能,我们必须寻找一种最为简便的方法,从思路上去简化,然后在编程过程中需要注意程序的调用和程序的条理问题。

一个程序就算功能实现了,但是也要使主程序和子程序的条理分明,易读性高,才能算一个比较好的程序,调试程序中,学习了汇编语言的整个调试过程,更加容易的找出程序的错误处了

其次在编写图形或文字的时候我们可以直接运用ASCII码先转换,然后设定程序进行读取,如此可以省去繁杂的程序并避免不必要的错误。

如此大大简化了程序,提高了速度。

通过此次课设,我更加了解了自身的不足,程序编写的不熟练以及操作的不简便浪费了很多时间,对课本以外的知识了解的很少,对软件的运行也不够熟练等。

但总的来说,自己还是进步较大,能够基本独立完成此次课设并学到了很多相关知识。

 

参考文献

[1]沈美明,温冬禅编著.IBM-PC汇编语言程序设计.第二版.北京:

清华大学出版社,2001

[2]周佩玲,吴耿峰,万炳奎编著.十六位微型计算机原理接口及其应用.合肥:

中国科学技术大学出版社,1995

[3]艾德才编著.Pentium/80486实用汇编语言程序设计.北京:

高等教育出版社,2000

[4]谭浩强编著.计算机硬件技术基础.北京:

电子工业出版社,2004

[5]李继灿编著.新编16-32位微型计算机原理及应用.北京:

清华大学出版社,1997

[6]邹逢兴编著.计算机硬件技术基础.北京:

高等教育出版社,2001

[7]邹逢新等编著.微型计算机原理及其应用典型题解析与实战模拟.长沙:

国防科技大学出版社,2001

[8]周佩玲,彭虎,傅忠谦编著.微机原理与接口技术.北京:

电子工业出版社,2007

 

附录源程序代码

DATASSEGMENT

addrbufdw0,0

colorchangedb0

ledb'$'

db'******$'

db'*****$'

db'*****$'

db'******$'

db'******$'

db'******$'

db'******$'

db'******$'

db'*****$'

db'*****$'

db'*******$'

db'********$'

db'**********$'

db'********$'

db'*******$'

db'******$'

db'*****$'

db'****$'

db'*****$'

db'*****$'

db'****************************************$'

db'*********************************************$'

db'*********************************************$'

db'********$'

db'*******$'

db'*******$'

db'******$'

db'*******$'

db'*******$'

db'*********$'

db'***********$'

db'**********$'

db'********$'

db'*********$'

db'**************$'

db'********************$'

db'***************************$'

db'**************$'

db'*********$'

db'******$'

db'****$'

db'***$'

db'***$'

db'**$'

db'**$'

db'**$'

db'**$'

db'**$'

db'*$'

totalbyteequ$-le

kuaidb'$'

db'*$'

db'**$'

db'****$'

db'****$'

db'*****$'

db'*****$'

db'*****$'

db'*******$'

db'**********$'

db'***************$'

db'***********************$'

db'************************$'

db'*****************$'

db'*********$'

db'*********$'

db'*********$'

db'*********$'

db'*********$'

db'*********$'

db'*********$'

db'****************************$'

db'********************************$'

db'************************************$'

db'*************$'

db'***********$'

db'**********$'

db'********$'

db'********$'

db'*********$'

db'*******$'

db'******$'

db'******$'

db'*****$'

db'******$'

db'***********$'

db'*********$'

db'******$'

db'*****$'

db'**$'

db'**$'

db'****$'

db'*****************************************************$'

db'*******************************************************$'

db'**********$'

db'$'

db'$'

db'$'

db'******$'

db'************$'

db'**********$'

db'******$'

db'*$'

niandb'$'

db'**$'

db'***$'

db'***$'

db'***$'

db'***$'

db'**$'

db'**$'

db'**$'

db'***$'

db'*****$'

db'******$'

db'********$'

db'*********$'

db'********$'

db'******$'

db'******$'

db'******$'

db'******$'

db'******$'

db'*******$'

db'******$'

db'*******$'

db'**********************************************$'

db'**********************************************$'

db'***********$'

db'*******$'

db'*******$'

db'*******$'

db'*******$'

db'********$'

db'*********$'

db'************$'

db'***************$'

db'**************$'

db'*********************$'

db'**********************$'

db'***********************$'

db'*******$'

db'******$'

db'******$'

db'******$'

db'******$'

db'*****$'

db'****$'

db'****$'

db'****$'

db'****$'

db'****$'

db'****$'

db'**$'

db'**$'

db'*$'

xindb'$'

db'*$'

db'**$'

db'**$'

db'***$'

db'***$'

db'**$'

db'****$'

db'******$'

db'********$'

db'*****$'

db'*********************************$'

db'**************************************$'

db'***********************************$'

db'*******$'

db'****$'

db'*****$'

db'****$'

db'*****$'

db'***$'

db'**************$'

db'****************************$'

db'**********************************$'

db'***************$'

db'********$'

db'**************$'

db'***************$'

db'***************$'

db'***************$'

db'************$'

db'*************$'

db'***************$'

db'***************$'

db'************$'

db'***************************$'

db'************************************$'

db'***************************************$'

db'***************$'

db'*************$'

db'****************$'

db'********************$'

db'******************$'

db'*************$'

db'************$'

db'*********$'

db'*********$'

db'*********$'

db'******$'

db'*****$'

db'***$'

db'**$'

db'*$'

totalbytesequ$-xin

DATASENDS

STACKSSEGMENT

db100dup(0)

STACKSENDS

CODESSEGMENT

ASSUMECS:

CODES,DS:

DATAS,SS:

STACKS

START:

movax,DATAS

movds,ax

movax,STACKS

movss,ax

;修改中断向量表中的int9中断

cli

movax,0

moves,ax

pushes:

[9*4]

popds:

[0]

pushes:

[9*4+2]

popds:

[2]

movwordptres:

[9*4],offsetint9

moves:

[9*4+2],cs

sti

;设置输出屏幕的显示模式320X200,256色图形方式

movax,0A000H

moves,ax

movah,0

moval,13h

int10h

;clearthescreen

movcx,0

callclrsrc

deadlop:

movax,0

movbx,0

movcx,45

move1:

movsi,offsetxin

callplotname

deccx

cmpcx,0

jzlast1

movdx,1

calldelay

pushcx

movcx,0

callclrsrc

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

当前位置:首页 > 党团工作 > 入党转正申请

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2