1、 1 1.设计任务及要求分析设计任务及要求分析 本次课程设计要求用汇编语言设计“霓虹灯”模拟显示,需要实现的功能 如下:1、按下 b/B 键,分六笔快速画出矩形及其两条对角线;2、按下 y/Y 键, 流水灯从左到右依次点亮,然后一次熄灭;3、按下 q/Q 键,退出程序。分析本 设计不需要硬件设备,在微机原理实验集成环境 MF2KP 中编写程序,调用 DOS 命令和 BIOS 命令,并用合适的字符代替霓虹灯来实现。 1 方案方案论证论证 2.1 方案一 我们可以采用编写延时子程序的方法来实现延时,这种方法的主要原理是运 用计算机相应每一条的时间积累。程序如下: push bx push cx m
2、ov cx ,xx ;输入正数 A1: mov bx,xx ;输入正数 A2: dec bx Jnz A1 Loop A2 pop cx pop bx 此方案的原理是运用循环指令来进行, 主要通过设置cx和bx的值来进行复循环, 从而达到时间的积累即延时。 2.2 方案二 方案二:运用 DOS 功能调用。采用 21H 来中断调用,功能号为 AH=2CH,完 成的功能是设置时间,DH 的值变换一次是 0.01 秒,这样通过设置 DH 的值来设 2 置时间的延时。 2.3 方案比较 两种方案在理论上都是可行的, 但是课程设计任务在时间要求上不是很严格 只要区分快慢的大概效果既可,故选择方案一。 3
3、 设计原理设计原理 3.1 设计思想设计思想 本次课程设计主要中显示图案是通过显示单个字符逐步实现的, 通过移动光 标可以改变字符输出的位置, 位置的改变又是通过宏定义定义了一个程序段用于 改变光标,设计了两个变量分别为光标在屏幕上的行和列坐标,把已经设计好了 的图案的行列坐标分别定义在数据段的行列数据组里, 用指针自加的方式进行连 续调用显示。在显示中插入延时程序控制显示的效果。本次课程设计设计了二个 延时程序分别满足二种不同的延时需要。延时程序是通过 LOOP 循环来实现的, 可以改变 CX 的值来改变延时的长短。本次课设还涉及到清屏功能,故设计了一 个清屏子程序,通过 BIOS 功能的调
4、用实现清屏,和屏幕属性的设置。 整个程序分为三部分:第一段是继续与否的选择,检查输入是否为设计的 字符 b/B,是则进入下一程序断,否则继续检测;第二段是快速显示设计图案, 通过光标移动逐步显示完预设图案,并询问是否进入下一程序段,检查输入是否 为字符 yY,是则进入下一程序段,否则跳回第二段程序重复执行一遍;第三段 程序以较慢速度依次出现“*” ,以实现模拟流水灯的效果,然后一次消失,在这 个过程中检查是否有“q/Q”输入,有则跳转到中止程序段退出程序,否则继续。 3.2 程序中用到的程序中用到的 DOS 功能调用功能调用 (1) 01H 号功能调用(中断指令 int 21h) 功能:从键盘
5、输入 1 个字符 3 输入参数:无 输出参数:AL=ASCII 码 (2) 02H 号功能调用(中断指令 int 21h) 功能:在屏幕上显示 1 个字符(ASCII 码) 输入参数:DL=ASCII 码 输出参数:无。 (3) 09H 号功能调用(中断指令 int 21h) 功能:多字符输出到屏幕显示 输入参数:DS:DX=输出字符缓冲区首地址 输出参数:无 该功能对输出字符的个数没有要求,但输出字符串要以$结束。 (4) 4CH 号功能调用(中断指令 int 21h) 功能:返回操作系统 4CH 调用:MOV AH,4CH 3.3 程序中用到的程序中用到的 BIOS 功能调用功能调用 1)
6、 功能 01H 调用(中断指令 int 16h) 功能描述:检测键盘 输出参数:ZF=1 无码可读 ZF=0 输入于 AX 中 2) 功能 02H 调用(中断指令 int 10h) 功能描述:用文本坐标下设置光标位置 入口参数:AH=02H BH=页号 DH=行坐标 DL=列坐标 出口参数:无 3) 功能 06H 调用(中断指令 int 10h) 4 功能描述:初始化屏幕或滚屏 入口参数:AH=06H 向上滚屏,AH=07H 向下滚屏 AL=滚动行数(0,清窗口) BH=空白区域的缺省属性 (CH、CL)=窗口的左上角坐标(X、Y) (DH、DL)=窗口的右下角坐标(X、Y) 出口参数:无 4.程序设计流程图程序设计流程图 程序流程图如下图所示,分为主程序流程图和子程序流程图。主程序流程图 如图 41 所示;置光标宏定义流程图如图 42 所示;延时子程序流程图如图 4 3 所示;字符显示流程图如图 44 所示。 5 错误错误!未找到引用源。未找到引用源。 错误错误!未找到引用源。未找到引用源。 错误错误!未找到引用源。未找到引用源。 错误错误!未找到引用源。未找到