您好,欢迎访问三七文档
第九章图形和发声程序10.1显示方式10.2BIOS图形显示中断10.3图形方式下的文本显示10.4动画显示技术10.5发声程序设计10.6乐曲程序本章我们主要要掌握图形、动画、乐曲的汇编语言程序设计。10.1显示方式ROMBIOS显示例程支持多种文本方式和图形方式,每种方式适合于特定适配器。在不同的显示方式下,屏幕显示的分辨率、颜色数和视频显示存储器的组织方式都不同。10.1.1分辨率显示分辨率包括字符分辨率和像素分辨率,分别表示显示器在水平和垂直方向上所能显示的字符数和像素数。显示分辨率和色彩决定了显示器的显示质量,分辨率越高所显示的字符和图像就越清晰,但是需要更多的处理时间和更大的存储空间,而速度和成本也是不容忽视的问题。10.1显示方式10.1.2BIOS设置显示方式显示方式分为两类:文本方式和图形方式。文本方式主要用于字符文本处理,图形方式又称为所有点可寻址方式。在图形方式下,可通过读写屏幕上各个点的映像,显示出单色或彩色图形。BIOS显示中断提供了设置各种文本和图形显示方式的功能,程序只要给出调用参数,使用BIOSINT10H即可建立某种显示方式。0AL=0040*25文本16级灰度CGAMCGAEGAVGA=0380*25文本16色或8色CGAMCGAEGAVGA=04300*200图形4色CGAMCGAEGAVGA=06640*200图形黑白显示CGAMCGAEGAVGA=0780*25文本黑白显示MDAEGAVGA=0D320*200图形16色EGAVGA=10640*350图形4色或16色EGAVGA=12640*480图形16色VGA=13320*200图形256色MCGAVGAAH调用参数显示方式适合显示器适配器BIOS设置显示方式INT10H常用的显示方式:例:设置320*200图形256色显示方式。MOVAH,00HMOVAL,13HINT10H注意:在为未知的显示器编写程序时,首先应该判断PC机配置的显示适配器并选择与之相适应的最佳显示方式。BIOSINT11H有确定系统配置的功能。这个操作实际上是把设备标志的值回送给AX,其中4位和5位表示显示器的配置及初始的显示方式,如下图所示:01=彩色适配板(40*25彩色)10=彩色适配板(80*25彩色)11=黑白适配板(80*25彩色)01234567设备标志字提供的信息是相当原始的,一般只能区分出是单色还是彩色显示。另一种确定适配器的方法是调用BIOSINT10H。٭确定是否装配VGA适配器。MOVAH,1AHMOVAL,0INT10H;AL=1AH,有装配VGA适配器,否则没有。相关代码运行结果٭确定是否装配EGA适配器。MOVAH,12HMOVBL,10HINT10H;BL=10H,有装配EGA适配器,否则没有。10.2BIOS图形显示(INT10H)AH功能调用参数返回参数0CH将一个点写至像素位置AL=像素颜色,取决于显示方式合适的视频显示方式下,BH=显示页号还可以指定颜色。DX=像素列,取决于显示方式CX=像素行,取决于显示方式0DH读取指定像素位置的颜色。BH=显示页号AL=颜色值DX=像素列,取决于显示方式CX=像素行,取决于显示方式例:从坐标(50,0)到(50,320)画一条直线。代码运行效果例:画一个高50,宽100的矩形。代码运行效果例:读取坐标为(50,12)像素位置的颜色。代码debug910.3图形方式下的文本显示大多数图形程序都需要以某种形式显示文本,最简单的一种方法是使用BIOS字符显示功能。许多图形程序还通过使用ASCII码扩展字符集中的图形符号来组成大号的显示字符。例如利用ASCII码为0DBH,0DCH,0DDH,0DEH,0DFH等方块来设计大号字母或文章中的方块标记。例:利用方块符号来组成G字符,背景用品红色,方块符号用浅绿色。代码运行结果10.4动画显示技术计算机动画是利用计算机图形显示技术来模仿物体活动的效果,一般分为两种类型:逐帧动画和实时动画。逐帧动画技术的最重要的用途是设计图形系列以建立用不同介质表现的动画图象。例如,利用图形系统来制作卡通电影的图片,当把这些图片以适当的速度投影时,就会产生运动的影像。设计这种逐帧动画的图片,对计算机系统的性能没有严格的要求。对实时动画来说,因为直接在终端上显示动画程序执行的结果,所以计算机系统的性能的优劣直接影响动画生成的速度和图象的质量,此时计算机的性能就显得非常重要了。屏幕物体的动画效果,经常通过几何变换来产生,最简单的几何变换有平移、旋转和比例变换,复杂的动画通过组合两个或更多的变换来完成。在所有情况下,变换都是以一个新的图象代替先前的图象来实现。在动画软件中,不仅要能画出一系列连续的图象,而且要能从屏幕上擦除先前的图象,否则,运动的物体就会在屏幕上留下痕迹。擦除和重画屏幕物体有几种实现的方法,最直接的一种方法是在显示图形之前,把图形将要占据的屏幕部分的背景图象保存下来,当要擦出图形时,再把保存的背景图象重新显示出来。另一种擦除屏幕图象的方法是基于XOR操作的方法。移动案例演示代码变形案例演示代码可编程时间间隔定时器8253/54CLK时钟输入端GATE门控信号输入端OUT计数/定时输入端控制寄存器(8位)端口号43H计数器0(16位)计数器1计数器2端口号40h端口号41h端口号42h其中CLK输入频率为1.1931817MHz(12348ChHZ)计数器0为系统日时钟提供时基准计数器1用作DRAM刷新的定时信号计数器2用来控制扬声器发声10.5发声程序设计计数初值格式操作模式读写指示选择计数器控制寄存器(8位)端口号43H例将计数器0设定为模式3,计数初值为4282(BCD)MOVAL,00110111BOUT43H,ALMOVAX,4282HOUT40H,ALMOVAL,AHOUT40H,AL计数器的输出频率=1.19318MHz/装入计数器的计数初值。计数器0作为定时器为系统提供计时基准,计时器0的输出端OUT与中断控制器8259A的中断请求端IRQ0相连,为IRQ0提供每秒18.2次的中断信号。计数器1作为定时器使用,其输出脉冲用作DRAM刷新的定时信号。DRAM要求每隔15цs刷新一次,这样,OUT1的输出脉冲的平率是66.2KHz。计数器2用来控制扬声器的发声频率。10.5发声程序设计例使计数器2在模式3下输出频率为330。MOVDI,330MOVAL,0B6HOUT43H,ALMOVDX,12HMOVAX,348CHDIVDIOUT42H,ALMOVAL,AHOUT42H,AL10.5发声程序设计CLK计数器28255可编程序外围接口芯片GATE扬声器与15.08us触发一次15.08us*33144/2=0.5s下一页例:写一个发声子程序,入口参数为发声频率和延长节拍。设入口参数发声的频率放在DI中,让计数器3输出频率为DI中的值。moval,0b6hout43h,almovdx,12hmovax,348chdivdiout42h,almoval,ahout42h,al让61端口产生一个脉冲,打开扬声器,脉冲的延长时间由入口参数BX决定。inal,61hmovah,aloral,3out61h,alwait1:movcx,5602delay:loopdelaydecbxjnzwait1moval,ahout61h,al写一个WAITF子程序,延长的时间为15.08цs*CX的值,CX为入口参数waitfprocnearpushaxwaitf1:inal,61handal,10hcmpal,ahjewaitf1movah,alloopwaitf1popaxretwaitfendp由循环次数决定发声的延长时间的发声程序代码运行结果由WAITF子程序决定发声的延长时间的发声程序代码运行结果10.6乐曲程序的设计利用计算机控制发声的原理,可以编写演奏乐曲的程序。乐曲是按照一定的高低、长短和强弱关系组成的音调。在一首乐曲中,每个音符的音高和音长和频率和节拍有关。组成乐曲的每个音符的频率值和持续时间是乐曲程序发声所需要的两个数据。编写乐曲程序可以分为4个步骤:1.为演奏的乐曲定义一个频率表和一个节拍时间表。2.分别将来年各个表的偏移地址放入SI和BP。3.从表中取出音符的频率放入DI,取出音符的持续时间放入BX。太湖船乐曲演奏代码运行结果音符和频率之间有一定的对应关系,如果计算机键盘上的某些键和音符、频率也形成一种对应关系,则可通过键盘控制扬声器发出各种音符声音,这时计算机键盘就变成了钢琴键盘,就可以用它弹奏出简单的音乐。钢琴有88个音符,为了简单起见,下面编写一个八度音程的钢琴程序来了解键盘控制发声的原理。为了方便弹奏,让数字键1-8对应一个音阶的八个音符。八度钢琴程序代码运行结果返回返回
本文标题:图形和发声程序
链接地址:https://www.777doc.com/doc-3505428 .html