音乐程序课程设计520

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

微机原理课程设计设计题目:音乐演奏程序设计

学生贾高强

班级 09(秋)大专电子学号

指导教师王文珍

理工大学

课程设计任务书

学生指导教师

班级职称

一、课程设计题目

音乐演奏程序设计

二、主要设计参数及技术指标

本程序应用了BIOS中断功能的字符显示和乐曲演奏程序。并利用计算机控制发声原理,在计算机中有一个可编程时间间隔定时器,它能根据程序提供的记数值和工作模式,产生各种形状和各种频率的记数定时脉冲,提供给系统各个部分使用。该乐曲点播程序曲一个主程序和4个子程序组成。其中前三个子程序为乐曲演奏子程序,接着是发声程序和清屏子程序,最后是一个回车换行程序。

利用计算机控制发声的原理,可以编写演奏乐曲的程序。PC机上的大多数都是由主板上的8255(或8255A)可编程序外围接口芯片(PPI)管理的。PPI包括三个8位寄存器,两个用于输入功能,一个用于输出功能。输入寄存器分配的I/O端口号60H和62,输出寄存器分配的I/O端口号位61H。由PPI输出寄存器的0或1两位来控制扬声器的驱动方式

三、课程设计容及工作量

(一)设计计算说明书一份0.8-1.0万字

(二)、图纸部分

1、程序流程图 A0一

2音乐演奏程序设计电路图 A0一(选做)

四.课程设计的基本要求

能按时独立完成毕业设计规定的全部容,方案选择正确,论据充分,对设计中的主要问题分析深入,解决合理,有独立见解,能很好运用所学理论和提供的资料解决设计中的问题,能独立查阅和正确引用中外文参考资料,说明书文字通顺、清楚、选用数据论证合理、计算准确,图面整洁。

五、进程安排

课程设计进度检查表

六.主要参考文献

[1]美明,温冬婵,IBM-PC汇编语言程序设计(第2版),,清华大学,2009年5月

[2]何超,汇编语言程序设计实验与习题解答(第1版),,机械工业,2010年4月

[3]蔡启先,王智文,黄晓璐,汇编语言程序设计实验指导(第1版),,清华大学,2008年3月

[4]王爽,汇编语言(第2版),清除大学,2008年4月

[5]莲,汇编语言程序设计实训教程(第1版),,交通大学,2005年5月

[6]贺红娟,汇编语言程序设计教程(第1版),,清华大学,2009年4月

[7]然,汇编语言程序设计实训与解题指南(第2版),,理工大学,2009年10月

[8]开成,钟文龙,汇编语言案例教程(第1版),,化学工业,2009年3

课程设计开题报告

1、本课题的研究意义

大多数情况下Linux程序员不需要使用汇编语言,因为即便是硬件驱动这样的底层程序在Linux操作系统中也可以用完全用C语言来实现,再加上GCC这一优秀的编译器目前已经能够对最终生成的代码进行很好的优化,的确有足够的理由让我们可以暂时将汇编语言抛在一边了。但实际情况是Linux程序员有时还是需要使用汇编,或者不得不使用汇编,理由很简单:精简、高效和libc无关性。假设要移植Linux到某一特定的嵌入式硬件环境下,首先必然面临如何减少系统大小、提高执行效率等问题,此时或许只有汇编语言能帮上忙了

2、本课题的基本容简介

汇编语言是计算机能够提供用户使用的最快而又最有效的语言,也是能够用计算机所有特性能直接控制硬件的唯一语言。通过这次实验要求我们:

(1) 了解通用发声程序。

(2) 了解与掌握定时、计数、音乐、频率、时间之间的关系。

(3) 学会用发声程序的设计方法。

(4) 学会用汇编编辑音乐程序。

这里主要用到MASM来进行程序的调试和运行,在程序测试通过后,最后运行查看最终结果。

3、课程设计提纲:

一概述

1 背景分析

2 课程设计目的

3课程设计要求及功能

二总体方案设计

1 设计思路

2 程序流程图如下

三详细设计

1 可编程时间间隔定时器8253

2 发声程序设计

3 80x86的时间延迟

4 宏定义

5 清屏子程序设计

四详细的算法描述

1 主程序表述

2音乐处理程序详细描述

五程序的调试与运行结果说明

六使用说明

4、参考文献目录:

[1]美明,温冬婵,IBM-PC汇编语言程序设计(第2版),,清华大学,2009年5月

[2]何超,汇编语言程序设计实验与习题解答(第1版),,机械工业,2010年4月

[3]蔡启先,王智文,黄晓璐,汇编语言程序设计实验指导(第1版),,清华大学,2008年3月

[4]王爽,汇编语言(第2版),清除大学,2008年4月

[5]莲,汇编语言程序设计实训教程(第1版),,交通大学,2005年5月

[6]贺红娟,汇编语言程序设计教程(第1版),,清华大学,2009年4月

[7]然,汇编语言程序设计实训与解题指南(第2版),,理工大学,2009年10月

[8]开成,钟文龙,汇编语言案例教程(第1版),,化学工业,2009年3月

5、指导教师审阅意见:

摘要

汇编语言是一种功能很强的程序设计语言,也是利用计算机所有硬件特性并能直接控制硬件的语言。汇编语言,作为一门语汇编语言

言,对应于高级语言的编译器,需要一个“汇编器”来把汇编语言原文件汇编成机器可执行的代码。高级的汇编器如MASM,TASM等等为我们写汇编程序提供了很多类似于高级语言的特征,比如结构化、抽象等。在这样的环境中编写的汇编程序,有很大一部分是面向汇编器的伪指令,已经类同于高级语言。现在的汇编环境已经如此高级,即使全部用汇编语言来编写windows的应用程序也是可行的,但这不是汇编语言的长处。汇编语言的长处在于编写高效且需要对机器硬件精确控制的程序。

《音乐演奏程序设计》课程设计是在教学实践基础上进行的一次大型实验,也是对该课程所学理论知识的深化和提高。因此,要求我们能综合应用所学知识,设计与制造出具有较复杂功能的应用系统,并且在实验的基本技能方面上进行一次全面的训练。通过具体的问题分析、设计、调试、运行程序。在实际问题中锻炼提高自己,增加了对本门课程容的理解,锻炼了动手能力。就这个程序具体而言:知道了音调与频率和时间的关系,就可以按照乐曲的曲谱将每个音符的频率和持续时间定义成两个数据表;然后编写程序一次取出表中的频率值和时间值,调用GENSOUDF程序发出各种声音。这个程序最终通过菜单所提示的信息选取所欣赏的音乐,是执行此程序后,会很有速且有效的使扬声器接通并发出音频位896Hz的声音。

关键词:汇编语言、运行程序、演奏、调试

Abstract

The CNC lathe machine frame is the important component. Used for cutting knife with tool clamping, therefore its structure directly affect the cutting machine cutting performance and efficiency. To a certain extent, the structure and properties of the cutter reflected machine design and manufacturing technology level. With the continuous development of CNC lathe, frame structure form was renovates ceaselessly. According to the change of the different ways of CNC lathe, the main frame system of rotary cutter, platoon type knife knife and automatic change device of various forms. For the first time since 1958 nc machining center has successfully developed automatic change device, automatic change device of mechanical structure and control continuously improved and perfected. Automatically change device is processing center, it's important in a variety of forms, the most common are: rotary cutter knives, replace the spindle change with the sword and head for the knife knifsystem for automatic library.

The design of lifting frame for spiral involved four cutter, the working principle of rotary cutter for mechanical nut and transposition. Working process can be divided into the frame lift, cutter, cutter positioning and transposable pressure etc. Several steps.

Keywords: automatic rotary cutter numerical simulation automation tool CNC programming

目录

一概述 (9)

1 背景分析 (9)

2 课程设计目的 (10)

3课程设计要求及功能 (11)

3. 1 (11)

3. 1. 2 (11)

3. 1. 3 (11)

二总体方案设计 (12)

1 设计思路 (12)

2 程序流程图如下: (13)

三详细设计 (14)

1 可编程时间间隔定时器8253 (14)

2 发声程序设计 (15)

3 80x86的时间延迟 (16)

4 宏定义 (17)

5 清屏子程序设计 (18)

四详细的算法描述 (19)

1 主程序表述 (19)

2音乐处理程序详细描述 (20)

3音乐处理程序详细描述 (21)

五程序的调试与运行结果说明 (22)

六使用说明 (24)

七课程设计总结 (25)

参考文献 (26)

致 (27)

附录 (27)

一概述

1 背景分析

汇编语言是一种功能很强的程序设计语言,也是利用计算机所有硬件特性并能直接控制硬件的语言。汇编语言,作为一门语汇编语言言,对应于高级语言的编译器,需要一个“汇编器”来把汇编语言原文件汇编成机器可执行的代码。高级的汇编器如MASM,TASM等等为我们写汇编程序提供了很多类似于高级语言的特征,比如结构化、抽象等。在这样的环境中编写的汇编程序,有很大一部分是面向汇编器的伪指令,已经类同于高级语言。现在的汇编环境已经如此高级,即使

全部用汇编语言来编写windows的应用程序也是可行的,但这不是汇编语言的长处。汇编语言的长处在于编写高效且需要对机器硬件精确控制的程序。

大多数情况下Linux程序员不需要使用汇编语言,因为即便是硬件驱动这样的底层程序在Linux操作系统中也可以用完全用C语言来实现,再加上GCC这一优秀的编译器目前已经能够对最终生成的代码进行很好的优化,的确有足够的理由让我们可以暂时将汇编语言抛在一边了。但实际情况是Linux程序员有时还是需要使用汇编,或者不得不使用汇编,理由很简单:精简、高效和libc无关性。假设要移植Linux到某一特定的嵌入式硬件环境下,首先必然面临如何减少系统大小、提高执行效率等问题,此时或许只有汇编语言能帮上忙了

《音乐演奏程序设计》课程设计是在教学实践基础上进行的一次大型实验,也是对该课程所学理论知识的深化和提高。因此,要求我们能综合应用所学知识,设计与制造出具有较复杂功能的应用系统,并且在实验的基本技能方面上进行一次全面的训练。通过具体的问题分析、设计、调试、运行程序。在实际问题中锻炼提高自己,增加了对本门课程容的理解,锻炼了动手能力。就这个程序具体而言:知道了音调与频率和时间的关系,就可以按照乐曲的曲谱将每个音符的频率和持续时间定义成两个数据表;然后编写程序一次取出表中的频率值和时间值,调用GENSOUDF程序发出各种声音。这个程序最终通过菜单所提示的信息选取所欣赏的音乐,是执行此程序后,会很有速且有效的使扬声器接通并发出音频位896Hz 的声音。

2 课程设计目的

汇编语言是计算机能够提供用户使用的最快而又最有效的语言,也是能够用计算机所有特性能直接控制硬件的唯一语言。通过这次实验要求我们:

(1) 了解通用发声程序。

(2) 了解与掌握定时、计数、音乐、频率、时间之间的关系。

(3) 学会用发声程序的设计方法。

(4) 学会用汇编编辑音乐程序。

这里主要用到MASM来进行程序的调试和运行,在程序测试通过后,最后运行查看最终结果。

为了编写一个流行音乐乐曲演奏程序,分析时按照课程设计的要求必须要有操作提示、输入和输出。在界面设计时应该追求友好,能够使用户便于使用该程序。而且按照课题要求最好能够实现菜单式的界面,进一步提高该程序界面的友

好性。同时,在设计分析时也必须解决发声问题。分析设计时按照课本P383(10.4 通用发声程序)所示的设计方法解决发声问题。

通过音乐程序设计熟悉并掌握用汇编语言编程的方法和特点,借此来比较高级语言低级语言的优缺点,以便更好运用各种语言来开发应用软件通过实际动手能力的培养,进一步熟悉汇编语言的结构和使用方法。达到能独立阅读、编制和调试一定规模的汇编语言程序的水平,能用汇编语言熟练地运用三大结构,进一步掌握各个指令的功能,特别是转向指令,能掌握子程序的定义及调试,包括段间及段调用,以及正确地运用DEBUG指令,进一步理解和掌握程序直接控制I/O 方式。

3课程设计要求及功能

3. 1在本次课程设计中,编写源程序,并要现以下功能:

3. 1. 1采用位触发方式编写程序,使计算机发出音响并奏出几首可选的

乐曲。

(1) 通过查阅相关资料,进一步理解程序直接控制I/O方式和位触发方式控制声音的工作原理(两种方式的概念及工作过程)。并要求怎样实现,了解掌握其运行各自的情况,在什么要的情况下使用。

(2) 一首乐曲是由不同频率和节拍的音调组成,因此控制脉冲的频率和持续时间是编写乐曲程序的关键。根据已知的音符频率对照表,给出乐曲的频率表:设二分音符持续时间为0。5秒(50*10ms),50作为2拍的计数值,给出乐曲的节拍时间表。[1]

(3) 用MASM进行调试,反复测试,不停反复的测试各个功能,看是否会有程序运行错误。例如:极限值的设置等。在不停测试程序直到正确时,测试工作才算完成,可以供以后的使用。

3. 1. 2进一步学习利用定时器产生声音的方法,使计算机奏出乐曲。

3. 1. 3必须全面了解MASM 的功能,并能熟练使用MASM完成汇编程序

的编译、调试、运行。

3. 2MASM软件简介

3. 2. 1 MASM的主要版本:

2000年微软发布了MASM6。15版本,后来出现MASM 64位元版。

6.15 版是放在 Visual C++ 6。0 Processor Pack 中。

7.0 版是放在 Visual C++ 。NET 2002。

7.1 版是放在 Visual C++ 。NET 2003。

8.0 版是放在 Visual C++ 。NET 2005,它也可以组译 x64 的程式码。

3. 2. 2特点及功能介绍:

4. x 1980 年代末期最流行的版本,很多组合语言入门书都以它为本。

5. x 开始强化组译器简易指令(点指令),以简化程式架构。稍晚的组合语言入门书亦大量运用此一版本。

6. x 版本为了支援Windows,有几个重大特色:

(1)支援 flat 与 386 以上 CPU保护模式。整合 PWB

(Programmer'sWorkBench)开发环境。这软件在同时期的 Quick BASIC 也找得到。

(2)支援 DOS Extender,建 DOS/16M。

(3)开始支援 OS/2 与 WinAPI。

(4)简易指令加入流程控制叙述,如。IF、。While、。Exit。。。。。。

等。

(5)强化对外部函式库的支援命令,如 proto 与 invoke 等指令,其中最核心的是将 proc 指令包装成符合高阶语言风格(支援 C 与 Pascal 风格)的形式,且 invoke 指令重新包装 call 与 push/pop 指令,可以更直观、高阶地运用函式。这对呼叫高阶语言写成的函式、特别是繁复的 WinAPI 非常重要。

(6)masm 与 link 整合为 ML。

(7) NMake 的makefile 描述结构也产生了巨大的变化。

二总体方案设计

1 设计思路

本程序应用了BIOS中断功能的字符显示和乐曲演奏程序。并利用计算机控制发声原理,在计算机中有一个可编程时间间隔定时器,它能根据程序提供的记数值和工作模式,产生各种形状和各种频率的记数定时脉冲,提供给系统各个部分使用。该乐曲点播程序曲一个主程序和4个子程序组成。其中前三个子程序为乐曲演奏子程序,接着是发声程序和清屏子程序,最后是一个回车换行程序。

1. 1定义频率表和时间表

根据音阶表和简谱位演奏的乐曲定义一个频率freg和一个节拍时间表time。频率表中的数据可以才书本查到,节拍时间表中的数据是延迟时间10ms的倍数。

1. 2将两个表的偏移地址放入SI和DI

LEA SL MUS_FREQ

LEA BP DSMUS_TIME

1. 3取频率和时间

从表中取出音符的频率放入DI,取出音符的持续时间(实际上是10ms的倍数)放入BX。

MOV DI,[SI]

MOV BX,DS:[BP]

频率表中最后一个数据-1作为乐曲的结束符,也可以用0或其他的特殊值来代替。

1. 4调用SOUND子程序发出音调

调用通用发声子程序GENSOUND发声音调。这个程序比较简单,如果想演奏另一个乐曲,只需把freg和两个表中的数据换成另一个乐曲的频率和节拍时间就可以了。

2 程序流程图如下:

图1 程序流程图

三详细设计

1 可编程时间间隔定时器8253

在通用个人计算机中,有一个可编程时间间隔定时器8253,它能够根据程序提供的计数值和工作方式,产生各种形状和各种频率的计数/定时脉冲,提供给系统各个部件使用。本设计是利用计算机控制发声的原理,编写演奏乐曲的程序。

在8253/54定时器部有3个独立工作的计数器:计数器0,计数器1和计数器2,每个计数器都分配有一个断口地址,分别为40H,41H和42H.8253/54部还有一个公用的控制寄存器,端地址为43H.端口地址输入到8253/54的CS,AL,A0端,分别对3个计数器和控制器寻址.

对8353/54编程时,先要设定控制字,以选择计数器,确定工作方式和计数值的格式.每计数器由三个引脚与外部联系,见教材第320页图9-1.CLK为时钟输入端,GATE为门控信号输入端,OUT为计数/定时信号输入端.每个计数器中包含一个16位计数寄存器,这个计数器时以倒计数的方式计数的,也就是说,从计数初值逐次减1,直到减为0为止.

8253/54的三个计数器是分别编程的,在对任一个计数器编程时,必须首先讲控制字节写入控制寄存器.控制字的作用是告诉8253/54选择哪个计数器工作,要求输出什么样的脉冲波形.另外,对8253/54的初始化工作还包括,向选定的计数器输入一个计数初值,因为这个计数值可以是8为的,也可以是16为的,而8253/5的数据总线是8位的,所以要用两条输出指令来写入初值.下面给出8253/54初始化程序段的一个例子,将计数器2设定为方式3,

MOV AL,10110110B

OUT 43H,AL

OUT 42H,AL

MOV AL,AH

OUT 42H,AL

在IBM PC中8253/54的三个时钟端CLK0,CLK1和CLK2的输入频率都是

1.1931817MHZ. PC机上的大多数I/O都是由主板上的8255(或8255A)可编程序外围接口芯片(PPI)管理的.关于8255A的结构和工作原理及应用举例参阅教材第340—373页.教材第364页的”PC/XT机中的扬声器接口电路”一节介绍了扬声器的驱动原理,并给出了通用发声程序.本设计正是基于这个原理,通过编程,控制加到扬声器上的信号的频率,奏出乐曲的.

2 发声程序设计

2. 1 扬声器驱动方式

利用计算机控制发声的原理,可以编写演奏乐曲的程序。PC机上的大多数都是由主板上的8255(或8255A)可编程序外围接口芯片(PPI)管理的。PPI包括三个8位寄存器,两个用于输入功能,一个用于输出功能。输入寄存器分配的I/O 端口号60H和62,输出寄存器分配的I/O端口号位61H。由PPI输出寄存器的0或1两位来控制扬声器的驱动方式。

2. 1. 1 采用定时器方式:

它是利用8253/54定时器驱动扬声器。连接到扬声器上的是2。从扬声器的驱动系统图中可以知道,GATE2与端口61H的PBO相连,当PB0=1时,GATE2获得高电平,使定时器2可以在模板3下工作。定时器2的OUT2与端口61H的PB1=1是,语序OUT2的输出信号到达扬声器电路。

当通道2用于发声是,一般采用模式3下,输出线为“1”和“0”的时间各占计数时间的一半,因而产生一系列间隔均匀的脉冲。

2. 1. 2 采用位触发方式

程序直接控制PPI(8255A可编程序外围接口芯片)的输出控制寄存器(I/O 端口位61H)的第一位,使该位按所需的频率进行1和0的交替变化,从而控制开关电路产生遗传脉冲形,这些脉冲经放大后驱动扬声器发出声音。如果控制着一脉冲波形的脉宽和长度就可以产生不同频率和不同音长的声音。

乐曲是按照一定的高低、长短和强弱关系组成的音调。在一首乐曲中,每个音符的音高和音长与频率和节拍有关。组成乐曲的每个音符的频率值和持续时间是乐曲程序发声所需要的两个数据。音符的频率可以从乐谱中查到,但实际上送入计数器2的是输入频率1。1931MHz与音符频率相除的值,通过发生程序SOUNDF的前半部分就是完成这个计算,并将计数值送入计数器2的功能。

音符的持续时间是根据乐曲的速度及每个音符的节拍数来确定的。在4/4(四四拍)中,四分音符为1拍,每小节四拍,全音符持续4拍,二分音符持续2拍,四分音符持续1拍,八分音符持续半拍等。如果给全音符分配1s(100*10ms)的时间,则二分音符的持续时间为0。5s(50*10ms),四分音符的持续时间为0。25s(25*10ms),八分音符的持续时间为0。125s(12。5*10ms)。知道了音调和频率的关系,就可以按照乐曲的乐谱将每个音符的频率和持续的时间定义成两个数据表;然后编写程序依次取出表中的频率值和时间值,调用程序发出各种声音。[5]

3 80x86的时间延迟

利用CPU循环执行一条或几条指令来产生延迟时间是最常用的一种方法,但对8088/86,80286,80386,80486以及pentiumIV来说,由于它们的工作频率不同及有些指令执行周期的差异,执行同样的延迟程序,产生的延迟时间都不一样。为了建立一个与处理器无关的时间延迟,1BM采用了一种利用硬件产生时间延迟的方法,即通过监视端口61H的PB4,使PB4每15.08us触发一次,以产生一个固定不变的时间基准,。下面的WAITF程序就是一个产生N x 15.08us 时间延迟的程序。调用WALTF子程序时,CX寄存器必须装入15.08us的倍数N。

CX =15.08us的倍数

WAITF PROC NEAR

PUSH AX

WALTF1: IN AL,61H

AND AL,10H ;检测PB4的状态

CMP AL,AH ;是否发生变化

JE WAITF1 ;等待变化

MOV AH , AL ;存入新的PB4的状态

LOOP WAITF1 ;循环,直到CX = 0为止

POP AX

RET

WAITF ENDP

当CX中的计数值N=663时,调用WAITF子程序,可延迟10ms,若要延迟1s,可调用WAITF子程序100次,若要延迟0.5s,可调用WAITF子程序50次,依从类推,只要设置WAITF子程序的调用次数,就可获得所需的延迟时间。

4 宏定义

宏是源程序中一段有独立功能的代码程序。它只需要在源程序中定义一次,就可以多次调用它,调用时只需要用一个宏指令语句就可以了。

宏定义是用一组微操作来实现的。其格式是:

macro name MACRO [dummy parameter list]

·

·

·

ENDM

其中MACRO和ENDM是一对伪操作。这对伪操作之间是宏定义体——是一组有独立功能的程序代码。宏指令名(macro name)给出该宏定义的名称,调用时就是用宏指令名来调用该宏定义。宏指令名的第一个符号必须是字母,其后可以跟字母、数字或下划线字符。其中哑元表(dummy parameter list)给出了宏定义中所能用到的形式参数(或称虚参),每个亚元之间用逗号隔开。

经宏定义后的宏指令就可以在源程序中调用。这种对宏指令的调用称为宏调用,宏调用的格式是:

macro name [actual parameter list]

实元表(actual parameter list)中的每一项为实元,相互之间用逗号隔开。

当源程序被汇编时,汇编程序将对每个宏调用做宏展开。宏展开就是用宏定义取代原程序中的宏指令名,而且用实元取代宏定义中的哑元。在取代时,实元和哑元是一一对应的,即第一个实元取代第一个哑元,第二个哑元取代第二个哑元···以此类推。一般来说,实元的个数应该和哑元的个数相等,但汇编程序并不要求他们必须相等。若实元个数大于哑元个数,则多余的实元不予考虑;若实元个数小于哑元个数,则多余的哑元个数做“空”处理。[6]

在程序中,我们利用宏定义来实现字符串的输出功能,这样在输出提示语言时,不用每次都写一段很长的代码,而只需要改变宏定义中的参数即可。

具体的宏定义代码如下:

SHOW MACRO b

LEA DX , b

MOV AH,9

INT 21H

ENDM

若要调用时HELLO字符串,只须一句语句:

SHOW HELLO

这里需要注意的是,宏定义结束使用关键字NEDM,而不子程序结束时的ENDP。

5 清屏子程序设计

屏幕的其实行列不为(0,0)结束的行列不为(24,79),则屏幕上只有指定的一部分具有上卷的功能,这个屏幕伤的部分区域叫做窗口(window)像这样的窗口可以在屏幕上设置多个,这些窗口都可以独立使用。如果上卷超过指定窗口的顶部,这些行的容就消失,出现在窗口底部的新行被填为空格,其属性用BH 寄存器决定。

如果AL=0,则实现完成的工作是清楚屏幕的功能,它将按AL中的Blank字符(0)使指定的窗口为空白。

CLEAR PROC NEAR

PUSH AX

PUSH BX

PUSH CX

PUSH DX

MOV AH,6

MOV AL,0

MOV CH,0

MOV CL,0

MOV DH,48

MOV DL,158

MOV BH,7

INT 10H

POP DX

POP CX

POP BX

POP AX

RET

CLEAR ENDP

四详细的算法描述

1 主程序表述

code segment

assume cs:code,ds:data

begin:mov ax,data

mov ds,ax

next: dispmsg msgmenu

dispmsg msgchoose ;提示菜单及输入数字

inputbegin:mov ah,01h

int 21h

cmp al,'q' ;输入q则退出

je exit

cmp al,'1' ;比较数字<1?

jb doagain

cmp al,'4' ;比较数字>4?

ja doagain

相关文档
最新文档