学号姓名显示设计分解
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
学号姓名显示设计
一、设计概述
本次课程设计采用DOS和BIOS功能调用,采用25×80的彩色图像显示方式。先在坐标纸上用ASCII码所对应的字符拼出自己的名字和学号,并设定ASCII 码的颜色值。ASCII码对应字符的位置由行数与列数的二维坐标确定。其中行向上则减,向下则增;列向左则减,向右则增。程序在数据段中写出所要显示的我名字的位形图,每行数据段定义组成文字的一个点。其中包含组成文字的字符、颜色、横坐标、纵坐标。文字的变色是通过同一个字的不同颜色版本去覆盖当前的版本以及清屏、擦除程序实现的。文字的闪烁则是通过将颜色属性的八位二进制数的最高位置一实现的。通过比较输入字符与0、Q或q的大小,来实现退出的功能。
二、设计要求
1)利用80x86汇编语言BIOS中断调用的方法,通过字符设计自己的名字及学号,并在显示器上用6种以上的颜色显示出来;
2)姓名与学号可动态切换,且按某种规律闪烁变化,按“q”键退出;
3)可自行设计显示姓名及学号的方案。
三、设计内容
文字显示可采用坐标纸写点的方式,虽然写点的工作量较大,但是便于理解,容易修改。用相同字体但不同颜色的字符去覆盖对应的字符,只能起到变色的作用。要实现闪烁还要把每一个点的颜色属性最高位设为1。退出程序块中,在判断输入字符是否为Q或q之前必须加一段有没有字符输入的程序。否则,程序运行到判断字符这里,运行窗口就会等在那里,直到输入字符才能继续运行。这样每次运行到这里程序就会等着,实现不了霓虹灯的连续闪烁。
1.程序流程图
(1)主程序流程图
流程思路:数据段初始化→调用汉字显示程序,先显示汉字“li ”,再显示汉字“li1”→调用竖条纹显示程序,显示运动的条纹→判断是否有字符输入,没有的话,继续往下执行→有字符输入时,判断是否为“Q ”或“q ”→不为“ Q ”或“q ”时,转到执行程序段Aagain1→为“Q ”或“q ”时,退出程序。 主程序流程图如下:
图1 学号和姓名显示主程序 (2)子程序流程图
本程序显示的汉字为自己的名字,名字中的每个字都用不同颜色的版本写两次,然后竖形条纹扫过,条纹扫过时汉字被覆盖,条纹扫过后开始显示下一个文开始
数据段初始 Y
Y N N 调用条纹显示子程序,显示运动的条纹
调用汉字显示子程序,先后显示“098813”,“098813” 调用条纹显示子程序,显示运动的条纹 结束 输入字符是否是“Q ”、“q ”? 调用汉字显示子程序,先后显示“zhen ”,调用条纹显示子程序,显示运动的条纹
调用汉字显示程序,先后显示“li ”,“li1” 判断是否有字符输入?
字,然后条纹再扫过,一直这样循环。因此,子程序有汉字显示子程序、竖形条纹显示子程序、擦除子程序,对应的流程图分别如图2、3、4所示。
图2 学号和姓名显示子程序流程图
开始 Y N
CX 中内容自减1 寄存器出栈 判断CX 中内容是否为0? CX 出栈,保存循环次数 在指定坐标处写第一个点 CX 入栈 保存组成点的基本信息 CX 寄存器清零 寄存器入栈 结束
图3 竖形条纹显示子程序
寄存器入栈 CX 寄存器清零 保存组成点的基本信息 结束
寄存器出栈 将字符写11次 判断指定坐标处字符是否为*? 判断指定坐标处字符是否为@? CX 出栈,保存循环次数 在指定坐标处写第一个点 判断是否到达屏幕最左端? CX 寄存器入栈 Y N Y N N Y 开始
图4 擦除子程序
N
N N Y Y 结束 保存点的基本信息 列坐标dl 自减1
将字符改为* 将字符写11个 判断指定位置处
字符是否为*?
判断指定位置处字
符是否为@?
判断是否到达屏幕最左端? 保存组成点的基本信息 开始
2.主要程序段与程序设计分析
(1)程序中用到的BIOS内的中断功能
①02H号功能调用
功能:用文本坐标下设置光标位置
入口参数:AH=02H BH=显示页码
DH=行(Y坐标) DL=列(X坐标)
出口参数:无
②08H号功能调用
功能:读光标处的字符及其属性
入口参数:AH=08H BH=显示页码
出口参数:AH=属性 AL=字符
③09H号功能调用
功能:在当前光标处按指定属性显示字符
入口参数:AH=09H AL=字符
BH=显示页码 BL=属性(文本模式)或颜色(图形模式) CX=重复输出字符的次数
出口参数:无
④0FH号功能调用
功能:读取显示器模式
入口参数:AH=0FH
出口参数:AH=屏幕字符的列数 AL=显示模式
BH=页码
(2)程序中用到的DOS功能调用
①01H号功能调用
功能:从键盘输入一个字符
输入参数:无
输出参数:AL=ASCII码
②0BH号功能调用
功能:检查标准输入设备上是否有字符可读,该输入操作可被重定向
输入参数:AH=0BH
输出参数:AL=00H——无字符可读;FFH——有字符可读
③4CH号功能调用
功能:返回操作系统4CH
调用:MOV AH,4CH
INT 21H
(3)主要程序段与程序设计分析
①数据段
本课程设计源程序中的汉字运用写点的方式实现,在数据段的定义中,由组成汉字的点的ASCII码值、颜色、X坐标、Y坐标构成。
例如:li db 48
db 2ah,8ah,0,0
db 2ah,8ah,0,1
db 2ah,8ah,3,0
这段程序是第一个汉字“李”的位形图,其中2ah为组成“李”字第一个点的ASCII码值,在屏幕上显示为*;8ah为颜色属性,为淡绿色且闪烁;(0,0)为这个点的坐标,第一个为行坐标,第二个为列坐标。这个点为“李”字组成点的基准坐标,其它点的坐标设置与此点类似。坐标设置按照矩阵的形式,向上则行自减1,向下则行自增1,向左则列自减1,向右则列自增1。每写出一个点后,该点的坐标变回基准坐标(0,0)。本程序中写点是按照从左到右、从上到下的顺序写的,直至写完所有的点。
②写点程序段
首先将汉字位形图的地址送给寄存器,程序如下:
lea di, li
mov dh,12
mov dl, 20
其中,dh,dl分别对应于所写汉字第一个点在屏幕上显示时的行、列坐标。然后读取组成点的信息,程序段如下:
mov char_cnt1,cx
mov pointer1,di
mov line_on1,dh
mov col_on1,dl
mov char,cx