汇编程序设计实例.pptx
《汇编程序设计实例.pptx》由会员分享,可在线阅读,更多相关《汇编程序设计实例.pptx(118页珍藏版)》请在咨信网上搜索。
第第1010章章 汇编语言程序设计实例汇编语言程序设计实例 第第10章章 汇编语言程序设计实例汇编语言程序设计实例 10.1 视频显示系统程序设计视频显示系统程序设计 10.2 音频发声系统程序设计音频发声系统程序设计10.3 数据通信系统程序设计数据通信系统程序设计 习题习题10 第第1010章章 汇编语言程序设计实例汇编语言程序设计实例 10.1 视频显示系统程序设计视频显示系统程序设计 在微型计算机的图形显示方面,汇编语言具有极大的优势,这是因为显示在屏幕上的图形是由成千上万个像素组成的,对图形处理也需要复杂的算法和大量的指令。与高级语言相比,虽然表面上汇编语言显得复杂、凌乱和可读性差,但就速度而言,汇编语言最快。第第1010章章 汇编语言程序设计实例汇编语言程序设计实例 用汇编语言设计出来的图形显示有着直观、醒目和反应快速的优点,并且一旦掌握汇编语言显示技术的思路和基本显示模块,编程的工作仅是模块的运用和参数的修正。因此,汇编程序编制图形程序是程序设计中非常有意义和价值的工作之一。第第1010章章 汇编语言程序设计实例汇编语言程序设计实例 10.1.1显示方式显示方式与显示适配器及显示器密切相关,因此,必须熟悉和掌握显示器和与显示适配器相关的性能与技术指标。1.显示适配器IBMPC系列微机中,先后提供了多种显示适配器(显示卡),表10-1介绍了这些适配器的基本技术指标。显示适配器的功能基本是向下兼容,即新型显示卡功能包括前一档次显示卡的显示功能,而又有所增强。此外,实用中各厂家不同型号的产品性能不尽相同。第第1010章章 汇编语言程序设计实例汇编语言程序设计实例 表10-1显示适配器的基本技术指标类型分辨率彩色度(灰度)字符图形单色字符显示适配器(MDA)9147203502彩色图形适配器(CGA)8832020064020016选4高分辨率单色适配器(HGC)72020064035016选4第第1010章章 汇编语言程序设计实例汇编语言程序设计实例 显示模式信号模式其他7TTL06TTL7、FTTL第第1010章章 汇编语言程序设计实例汇编语言程序设计实例 增强型图形适配器(EGA)81464035064选16多色图形阵列(MCGA)814640400256视频图形阵列(VGA)916640480256高级视频图形阵列(TVGA)80060064K超级视频图形适配器(SVGA)1024768128010241680128016M局部高性能总线显示卡(PCI)1024768128010241680128016M图形加速阵列(AGP)102476812801024168012804G第第1010章章 汇编语言程序设计实例汇编语言程序设计实例 06、DF、10TTL06、DF、10模拟06、DF、1113模拟06、DF、1113模拟06、DF、1113模拟标准、非标准模拟图形加速标准、非标准模拟图形加速第第1010章章 汇编语言程序设计实例汇编语言程序设计实例 2.显示器目前,Intel公司80 x86/Pentium的微型机主要使用两种类型的显示器:数字(TTL)显示器和模拟显示器。1)数字(TTL)显示器该类型显示器的彩色分辨是用“1”和“0”来决定的。若某彩色信号为“1”,则在屏幕上呈现出这一彩色,否则屏幕上不显示这一彩色。TTL显示器上能显示的彩色种类与彩色信号输入线的多少有关。第第1010章章 汇编语言程序设计实例汇编语言程序设计实例 如CGA与彩色有关的信号线有红(R)、绿(G)、蓝(B)和亮度(I),这四种信号可组合成216种不同的颜色,字符的显示可从其中选择做前景或背景色。CGA和EGA适配器仅能支持TTL显示器。第第1010章章 汇编语言程序设计实例汇编语言程序设计实例 2)模拟显示器模拟显示器有3种彩色信号输入线(红、绿、蓝),加在每个输入线上的电平的高低级别决定了显示在屏幕上的那种彩色的数量。从理论上讲,它能显示的彩色数量是无限的,但实际应用中却是有限的,这主要取决于显示适配器的能力。由于彩色数量的无限性,模拟显示器被认为是一种优秀的显示技术。VGA及以上显示方式必须配置模拟显示器。目前386及其以上的机型基本上选用VGA适配器和模拟显示器。第第1010章章 汇编语言程序设计实例汇编语言程序设计实例 3)显示器分辨率分辨率是显示器的重要指标,它关系到显示器的性能和图像质量。图像质量由两个主要因素决定:其一是屏幕上扫描图像的速度;其二是屏幕上的像素数,像素数又称分辨率,以屏幕行像素数(x)列像素数(y)的形式表示。例如,表10-1中VGA的分辨率是640480,就是说,这种方式下,每行可以分辨640个像素点,每列可以分辨480个像素点。第第1010章章 汇编语言程序设计实例汇编语言程序设计实例 显示器分辨率也有着向下兼容的问题,高分辨率显示器可以由低分辨率的适配器驱动。例如,SVGA显示器上显示VGA信号。而低分辨率显示器则不可以由高分辨率的适配器驱动,如果这样做了,轻则显示器行不同步,看不见图像,重则将造成显示器烧毁。第第1010章章 汇编语言程序设计实例汇编语言程序设计实例 3.显示方式由于设置或改变PC机的显示方式对时间的要求不严格,而要编写设置或改变显示方式的程序很困难,因此一般由DOS或BIOS调用来完成。BIOS显示例程提供了设置显示方式的功能,程序只要给出调用参数,使用BIOS的INT10H即可建立某种显示方式。表10-2列出了几种常用的显示方式。第第1010章章 汇编语言程序设计实例汇编语言程序设计实例 表10-2INT10H设置显示方式功能表(AH=00)调用参数(AL)显示方式分辨率色度或灰度004025文本16级灰度014025文本16色或8色028025文本16级灰度038025文本16色或8色04320200图形4色05320200图形4色06640200图形黑白显示第第1010章章 汇编语言程序设计实例汇编语言程序设计实例 078025文本黑白显示0D320200图形16色0E640200图形16色0F640350图形黑白显示10640350图形4色或16色11640480图形黑白显示12640480图形16色13320200图形256色第第1010章章 汇编语言程序设计实例汇编语言程序设计实例 适用显示适配器CGAMCGAEGAVGACGAMCGAEGAVGACGAMCGAEGAVGACGAMCGAEGAVGACGAMCGAEGAVGACGAMCGAEGAVGACGAMCGAEGAVGAMDAEGAVGA第第1010章章 汇编语言程序设计实例汇编语言程序设计实例 EGAVGAEGAVGAEGAVGAEGAVGAMCGAVGAVGAMCGAVGA第第1010章章 汇编语言程序设计实例汇编语言程序设计实例 10.1.2DOS功能调用显示技术操作系统的核心是由许多关于I/O驱动、磁盘读写和文件管理等程序段构成的。这些程序段都编了号,可由汇编语言的源程序调用。在调用时,把程序段的号(或称系统功能调用号)送至AH,把程序段规定的入口参数,送至指定的寄存器,然后由中断指令INT21H来实现调用。在这里通过几个程序举例来介绍有关I/O的功能调用,便于读者在编程中应用。第第1010章章 汇编语言程序设计实例汇编语言程序设计实例 【例10-1】在微型计算机系统上常常可以显示实时时钟,这就要求能输出数码0059。要输出多于一个字符时,要利用DOS功能调用9,它是向CRT输出字符串的子程序,要求在调用前使DX指向字符串的首地址,字符串必须以字符“”结束,则功能调用9能把字符“”之前的全部字符向CRT输出。系统调用形式如下:第第1010章章 汇编语言程序设计实例汇编语言程序设计实例 MOVDX,OFFSETOUTSTRING;首地址装入DX寄存器MOVAH,9;系统功能调用号送入AHINT21H;启动DOS功能调用程序流程图如图10.1所示。程序的清单如下:TITLE 例10-1.ASMSTACKSEGMENTPARASTACKSTACK第第1010章章 汇编语言程序设计实例汇编语言程序设计实例 DB100DUP(?)STACKENDSDATA SEGMENTBUFFERDB3DUP(?)DATA ENDSCODE SEGMENTASSUME CS:CODE,DS:DATA,SS:STACKSTARTPROC FAR第第1010章章 汇编语言程序设计实例汇编语言程序设计实例 图10.1例10-1流程图第第1010章章 汇编语言程序设计实例汇编语言程序设计实例 BEGIN:PUSH DSMOVAX,0PUSHAXMOVAX,DATAMOVDS,AXMOVCX,1000MOVBL,0LEASI,BUFFERPUSHBX第第1010章章 汇编语言程序设计实例汇编语言程序设计实例 GOON:MOV DL,0DHMOVAH,2INT21HMOVDL,0AHMOVAH,2INT 21HPOPBX第第1010章章 汇编语言程序设计实例汇编语言程序设计实例 MOVAL,BLINCALDAACMPAL,60HJCNEXTMOVAL,0第第1010章章 汇编语言程序设计实例汇编语言程序设计实例 NEXT:MOV BL,ALPUSH BXMOVDL,ALPUSH CXMOVCL,4SHRAL,CLORAL,30HMOVSI,AL第第1010章章 汇编语言程序设计实例汇编语言程序设计实例 INCSIMOVAL,DLANDAL,0FHORAL,30HMOVSI,ALINCSIMOVAL,$MOVSI,ALMOVDX,OFFSETBUFFERMOVAH,9第第1010章章 汇编语言程序设计实例汇编语言程序设计实例 INT21HMOV CX,0FFFFHAGAIN:DEC CXJNEAGAINPOPCXDECCXJEDONEMOV SI,OFFSETBUFFERJMPGOON第第1010章章 汇编语言程序设计实例汇编语言程序设计实例 DONE:RETSTARTENDPCODE ENDSENDBEGIN第第1010章章 汇编语言程序设计实例汇编语言程序设计实例 10.1.3BIOS功能调用显示技术1.PC机彩色图形模式PC机彩色图形适配器有两大类模式:一种是文本(字符)模式(AN);另一种是图形模式(APA)。而每种模式又可包括不同的显示方式,可以通过BIOS的INT10H功能调用号0来设置或改变显示模式和显示方式。采用BIOS设置显示方式见8.4节。第第1010章章 汇编语言程序设计实例汇编语言程序设计实例 【例10-2】选择显示方式。程序流程图如图10.2所示。程序的清单如下:TITLE例10-2.ASMSTACKSEGMENTSTACKSTACKDB100DUP(0)STACKENDSDATASEGMENT第第1010章章 汇编语言程序设计实例汇编语言程序设计实例 ERRORDBINPUTERROR!TRYAGAIN,0AH,0DH,$MSG0DB*MENU*,0AH,0DH,$MSG1DB1,40*25B&WTEXT,0AH,0DH,$MSG2DB2,40*25COLORTEXT,0AH,0DH,$MSG3DB3,80*25B&WTEXT,0AH,0DH,$MSG4DB4,80*25CLOORTEXT,0AH,0DH,$MSGSDB5,320*200COLORGRAPHICS,0AH,0DH,$MSG6DB6,320*200B&WGRAPHICS,0AH,0DH,$第第1010章章 汇编语言程序设计实例汇编语言程序设计实例 COUNTEQU$-MSG6MSG7 DBPLEASECHOOSE:,$OKDB0AH,0DH,SET DISPLAYMODELOK!,$DATAENDSCODESEGMENT第第1010章章 汇编语言程序设计实例汇编语言程序设计实例 图10.2例10-2流程图第第1010章章 汇编语言程序设计实例汇编语言程序设计实例 ASSUMECS:CODE,DS:DATA,SS:STACKSETMODEPROC FARPUSH DSMOV AX,0PUSH AXMOVAX,DATAMOV DS,AX第第1010章章 汇编语言程序设计实例汇编语言程序设计实例 TRV:MOV DX,OFFSETMSG0MOV DI,COUNTMOV CX,8DMENU:CALL DISPADDDX,DILOOPDMENUMOV AH,1INT21HCMPAL,31HJLERR第第1010章章 汇编语言程序设计实例汇编语言程序设计实例 CMPAL,36HJGERRSUBAL,30HMOV AH,0INT10HJMPSETOKERR:MOVDX,OFFSETERRORCALL DISP第第1010章章 汇编语言程序设计实例汇编语言程序设计实例 MOVAH,6MOVAL,0MOVBH,7MOVCX,0MOVDX,184FHINT10HJMPTRVSETOK:MOV DX,OFFSETOK第第1010章章 汇编语言程序设计实例汇编语言程序设计实例 CALLDISPRETSETMODEENDPDISPPROC NEARMOV AH,9INT 21HRETDISP ENDPCODEENDSENDSETMODE第第1010章章 汇编语言程序设计实例汇编语言程序设计实例 2.在文本方式下显示字母、数字和一些字符图形对屏幕上的每一个字符,首先应给出它的ASCII码值,同时还要给出一个8bit(位)的属性字节。这个属性字节对单色和彩色显示均有效,在单色文本下,只提供闪烁、反显和亮度方面的属性。【例10-3】在屏幕的第10行10列以绿底红字闪烁显示“HOWDOYOUDO.”,程序流程图如图10.3所示。程序的清单如下:第第1010章章 汇编语言程序设计实例汇编语言程序设计实例 TITLE例10-3.ASMSTACKSEGMENTSTACK STACKDB100DUP(0)STACKENDSDATA SEGMENTMSGDB HOWDOYOUDO.COUNTEQU$-MSGDATA ENDSCODESEGMENTASSUMECS:CODE,DS:DATA,SS:STACK第第1010章章 汇编语言程序设计实例汇编语言程序设计实例 图10.3例10-3流程图第第1010章章 汇编语言程序设计实例汇编语言程序设计实例 DISPLAYPROC FARPUSH DSMOV AX,0PUSH AXMOV AX,DATAMOVDS,AXMOV AH,0MOV AL,3INT10HMOV BH,0MOV DH,0AHMOV DL,0AH第第1010章章 汇编语言程序设计实例汇编语言程序设计实例 MOV AH,2INT10HMOV SI,OFFSETMSGMOV DI,COUNTDISP:MOV AL,SIMOV AH,9MOV CX,1MOV BH,0MOV BL,0A4HINT10HINCSIINCDLMOV BH,0第第1010章章 汇编语言程序设计实例汇编语言程序设计实例 MOVDH,0AHMOVAH,2INT10HDECDIJNZDISPRETDISPLAYENDPCODE ENDSEND DISPLAY第第1010章章 汇编语言程序设计实例汇编语言程序设计实例 10.1.4彩色图形显示彩色图形是在图形方式下,由一组像素点在屏幕上形成的。图形方式相对于文本方式所要处理的数据量大,而且不同的显示适配器所支持的分辨率不同,因此同一彩色图形在不同分辨率的情况下,处理的数据量差别很大。第第1010章章 汇编语言程序设计实例汇编语言程序设计实例 1.彩色绘图在屏幕上绘制彩色图形,可用BIOS中INT10H的0号、11号、12号和13号功能调用。利用INT10H的这些功能调用,就可使屏幕上的绘图变得比较简单。通常情况下,有以下几步:第第1010章章 汇编语言程序设计实例汇编语言程序设计实例 (1)用INT 10H的0号功能将显示方式设置成320200彩色图形方式。MOVAH,0;设置显示方式MOVAL,4;置CGA为320200彩色图形方式INT10H;BIOS中断调用第第1010章章 汇编语言程序设计实例汇编语言程序设计实例 (2)用INT10H的11号功能设置彩色图形方式下的调色板或背景颜色。MOVBH,0;设置背景色MOVBL,C;C=颜色值(016)MOVAH,11;功能号送入AHINT10H;BIOS中断调用MOVBH,1;设置调色板MOVBL,N;N=调色板号(0,1)MOVAH,11INT10H第第1010章章 汇编语言程序设计实例汇编语言程序设计实例 (3)在上述工作的基础上,利用INT10H的12号功能调用或13号功能调用在屏幕上写彩色像素点或读彩色像素点。MOVAH,12;12号功能调用,写像素点MOVAL,C;C=像素点颜色(03)MOVDX,ROW;ROW=行号(0199)MOVCX,COL;COL=列号(0319)第第1010章章 汇编语言程序设计实例汇编语言程序设计实例 INT10H;BIOS中断调用MOVAH,13;13号功能调用,读像素点MOVDX,ROW;ROW=行号(0199)MOVCX,COL;COL=列号(0319)INT10H;BIOS中断调用第第1010章章 汇编语言程序设计实例汇编语言程序设计实例 2.彩色绘图举例【例10-4】编写一个8086/8088汇编语言程序,使程序运行后屏幕显示器成为一台电子钟。首先屏幕上显示提示符,要求从键盘上输入当前时间,然后每隔一秒使显示的秒值加1,达到60秒时使分值加1,秒值清零;达到60分时使小时值加1,分值清零;达到24小时则小时值清零。上述过程一直进行下去,当键入Ctrl+C时退出“电子钟”状态,返回DOS。根据上述要求,可画出程序的流程图如图10.4所示。第第1010章章 汇编语言程序设计实例汇编语言程序设计实例 图10.4例10-4流程图第第1010章章 汇编语言程序设计实例汇编语言程序设计实例 其中,显示一个字符串,以及从键盘上接收一个字符串可分别通过09号和0AH号DOS功能调用实现。延时1秒可以编写一个延时子程序。程序中对时、分和秒三个时间单位有许多类似的操作。例如,分别将它们由ASCII码转换为BCD码,或由BCD码转换为ASCII码,以及将时、分和秒值分别加1,并进行DAA调整后判断是否达到60H或24H等。对于这样的程序段,可以采用宏处理伪指令,以便缩短源程序的长度,使程序更加清晰,有利于结构的模块化。此外,还可以利用BIOS调用设计窗口,选择适当的背景色和前景色等,使屏幕显示更加美观。程序清单如下:第第1010章章 汇编语言程序设计实例汇编语言程序设计实例 TITLE例10-4.ASMDATASEGMENTBUF1DBCurrenttimeis:$BUF2DB10DB10DUP(?)DATAENDSSTACKSEGMENTSTACKDB100DUP(?)STACKENDSCODESEGMENT第第1010章章 汇编语言程序设计实例汇编语言程序设计实例 ASSUMECS:CODE,DS:DATAASSUMESS:STACKCURSORMACROROW,CLMMOVAH,2MOVBH,0MOVDH,ROWMOVDL,CLMINT10HENDM第第1010章章 汇编语言程序设计实例汇编语言程序设计实例 WINMACROROWL,CLML,ROWR,CLMR,COLORMOVAH,6MOV AL,0MOV CH,ROWLMOV CL,CLMLMOV DH,ROWRMOV DL,CLMRMOV BH,COLORINT10HENDM第第1010章章 汇编语言程序设计实例汇编语言程序设计实例 ASCBCDMACROREGINCBXINCBXMOVREG,BXMOVCL,4SHLREG,CLINCBXMOVAL,BXANDAL,0FHORREG,ALENDM第第1010章章 汇编语言程序设计实例汇编语言程序设计实例 BCDASCMACROREGINCBXINCBXMOV AL,REGMOV CL,4SHR AL,CLORAL,30HMOV BX,ALINCBXMOV AL,REGANDAL,0FHORAL,30HMOV BX,ALENDM第第1010章章 汇编语言程序设计实例汇编语言程序设计实例 INCBCDMACROREG,COUNTMOVAL,REGINCALDAAMOVREG,ALCMPAL,COUNTJNZDISPYMOVREG,0ENDM第第1010章章 汇编语言程序设计实例汇编语言程序设计实例 STRDSPYMACROADRSLEADX,ADRSMOVAH,9INT21HENDMCLOCKPROCFARSTART:PUSHDSMOVAX,0PUSHAXMOVAX,DATAMOVDS,AX第第1010章章 汇编语言程序设计实例汇编语言程序设计实例 WIN0,0,24,79,7,WIN9,28,15,52,01010111BCURSOR11,32STRDSPYBUF1CURSOR13,36LEADX,BUF2MOVAH,0AHINT21HLEABX,BUF2ASCBCDCHASCBCDDHASCBCDDL第第1010章章 汇编语言程序设计实例汇编语言程序设计实例 TIMER:CALLDELYINCBCDDL,60HINCBCDDH,60HINCBCDCH,24HDISPY:LEABX,BUF2BCDASCCHBCDASCDHBCDASCDLINCBXMOVAL,$第第1010章章 汇编语言程序设计实例汇编语言程序设计实例 MOVBX,ALPUSHDXCURSOR13,36STRDSPYBUF2POPDXJMPTIMERDELYPROCPUSHCXPUSHAXMOVAX,3FFFH第第1010章章 汇编语言程序设计实例汇编语言程序设计实例 X1:MOV CX,0FFFFHX2:DECCXJNEX2DECAXJNEX1POPAXPOPCXRETDELY ENDPCLOCKENDPCODE ENDSENDSTART第第1010章章 汇编语言程序设计实例汇编语言程序设计实例 用这个程序可在屏幕上画出一些复杂图形,如多边形、山水花鸟和汽车等,也可在该程序的基础上增加图形装入、存盘和打印功能,以提高程序的实用性。第第1010章章 汇编语言程序设计实例汇编语言程序设计实例 10.2 音频发声系统程序设计音频发声系统程序设计 10.2.1PC机的发声原理IBM-PC系列机的主机箱装有一个小扬声器,系统板上的定时器8253(或8254)利用工作方式3产生一定频率信号,通过可编程的并行外围接口芯片8255(或8255A)控制其发音。扬声器的控制驱动电路如图10.5所示。第第1010章章 汇编语言程序设计实例汇编语言程序设计实例 图10.5扬声器控制驱动电路第第1010章章 汇编语言程序设计实例汇编语言程序设计实例 可编程的并行接口芯片8255有三个8位的并行端口:A口、B口和C口。在IBM系列微机中,BIOS在开机自检后已将8255初始化为A口和C口用于输入,B口用于输出。B口的I/O端口地址为61H。由图10.5可见,8255B口的低两位用来控制扬声器驱动,当输出端口61H的D1位为“1”或为“0”时,将使控制驱动器的与门电路接通或关闭,使8254所发出的音频信号能到达驱动器或被阻断。这样通过控制D1位的变化,可使扬声器接通和断开,控制扬声器是否能发出声音。此外,通过控制D1位的通断时间,就能发出不同的音长。第第1010章章 汇编语言程序设计实例汇编语言程序设计实例 61H端口的D0位为“1”时,控制8254定时器产生驱动扬声器发声的音频信号,该位为“0”则不发信号。8254有三个定时器,分为0号、1号和2号定时器,驱动扬声器的是2号定时器,该定时器工作在方式3,是一个频率发生器,它负责向扬声器发送指定频率的脉冲信号。当8255输出端口61H的D1位为“1”时,在61H的D0位为“1”,8254发出指定频率的声音信号的前提下,声音信号通过与门到达驱动器驱动扬声器发声。本节主要介绍利用8254产生声音和乐曲。第第1010章章 汇编语言程序设计实例汇编语言程序设计实例 10.2.2发音程序BIOS中有一个BEEP子程序,它可以产生896Hz的声音,且声音持续时间只能是0.5s的整数倍。BEEP子程序用于PC机加电自检发现硬件错误,或正常进入系统等过程后,向用户发出声音提示。可以利用这一子程序的思路,来编写通用的发音程序。发音程序的编制需要进行以下四个方面工作。第第1010章章 汇编语言程序设计实例汇编语言程序设计实例 (1)确定发声频率。BEEP子程序将计数值533H送8254的定时器2而产生896Hz的声音,那么要产生其他频率的声音,则必须将对应频率的计数值送8254的定时器2产生其他频率声音的计数值。该方法如下所示:533H896给定频率=123280给定频率(也可用定时器的时钟1192576Hz直接计算计数值:1192576给定频率。)假设给定频率在DI中,可用下面的指令序列在AX中得到计数值。第第1010章章 汇编语言程序设计实例汇编语言程序设计实例 MOVDX,12HMOVAX,3280DIV DI;计算某频率的计数值为了不产生除法溢出,限制DI中的频率不低于19Hz,一般情况下声音频率不会这样低。第第1010章章 汇编语言程序设计实例汇编语言程序设计实例 (2)确定音长。BEEP子程序只能产生持续时间(音长)为0.5s的整数倍的音长,如果要求持续时间容易调整,利用软件延时程序可选择较短的持续时间作为基数,如10ms(毫秒)。10ms延时可由执行循环指令实现:MOV CX,2801DELAY:LOOP DELAY如果要产生与10ms成倍数的延时,可将倍数送到BX寄存器中,由BX再控制10ms延时指令的执行次数。如产生0.5s持续时间,则将50送入BX中,指令序列如下:第第1010章章 汇编语言程序设计实例汇编语言程序设计实例 MOV BX,50DELAY0:MOV CX,2801DELAY1:LOOPDELAY1DEC BXJNZDELAY0第第1010章章 汇编语言程序设计实例汇编语言程序设计实例 (3)定时器调节。在对BEEP子程序作上述两方面修改的基础上就可以编写一个任一频率(由DI指定)和任一持续时间(由CX和BX指定)的通用发音程序。由于该发音程序使用8254定时器2产生声音的频率,因此需要对定时器2进行相应的设置。对输入/输出端口43H(该端口分配给8254的工作方式寄存器)送一个特定的数0B6H,这个数用于对定时器2的工作方式进行初始化,使定时器2准备接收计数值。第第1010章章 汇编语言程序设计实例汇编语言程序设计实例 对输入/输出端口42H(该端口分配给定时器2)中送一个16位的计数值(即123280给定频率),用于设置将要产生的声音频率。(4)操作扬声器开关。由于扬声器驱动由8255的输出端口61H的低两位控制,故应把输出端口61H的D0和D1位置“1”,以便使扬声器发出声音。第第1010章章 汇编语言程序设计实例汇编语言程序设计实例 10.2.3乐曲演奏程序利用通用发音子程序CSOUND,可以编写演奏乐曲程序。在乐曲中,每个音符的音高和音长与频率节拍有关。下面给出音律表的一部分,见表10-3,该表对应3个音阶。第第1010章章 汇编语言程序设计实例汇编语言程序设计实例 表10-3音阶频率对照表 音名CDEFGABCDEFGAB简谱12345671234567频率131147165175196220247262294330349392440494CDEFGAB1234567524588660698784880984第第1010章章 汇编语言程序设计实例汇编语言程序设计实例 演奏乐曲的程序中需要有两组数据支持:一组是频率数据;一组是节拍时间数据。音符的频率可以从表10-3中查得。节拍时间就是音符的持续时间,取决于乐曲的速度和每个音符的节拍数据。如4/4(四四拍)中,每小节包括4拍,全音符持续4拍,二分音符持续2拍,四分音符持续一拍,八分音符持续半拍等。有了音调与频率和时间的关系后,就可以按照乐曲的曲谱将每个音符的频率和持续的时间定义成两组数据表,然后编程依次取出表中的频率值和时间值,调用CSOUND子程序就可发出各种声音。例10-5的程序中为全音符分配了1s时间。第第1010章章 汇编语言程序设计实例汇编语言程序设计实例 【例10-5】图10.6是“两只老虎”的简谱。根据乐谱在数据段中定义了频率数据表(Freq)和节拍时间数据表(Time),程序以?1作为频率数据表的结束标志。程序流程图如图10.7所示,演奏该乐曲程序如下:1=C4/4第第1010章章 汇编语言程序设计实例汇编语言程序设计实例 图10.6“两只老虎”简谱1=C4/41231|1231|345|345|565431|565431|251|251|第第1010章章 汇编语言程序设计实例汇编语言程序设计实例 NAME例10-5.ASMDATASEGMENTFREQW262,294,330,262,262,294,330,262W330,349,392,330,349,392,392,440W392,349,330,262,392,440,392,349DW330,262,294,196,262,294,196,262,-1第第1010章章 汇编语言程序设计实例汇编语言程序设计实例 TIMEDW25,25,25,25,25,25,25,25,25,25DW50,25,25,50,12,12,12,12,25,25DW12,12,12,12,25,25,25,25,50,25,25,50SNAMEDBTWOTIGER.$DATAENDSSTACKSEGMENTSTACK STACKDB100DUP(0)STACKENDSCODESEGMENTASSUMECS:CODE,SS:STACK,DS:DATA第第1010章章 汇编语言程序设计实例汇编语言程序设计实例 图10.7例10-5流程图第第1010章章 汇编语言程序设计实例汇编语言程序设计实例 PLAYPROC FARPUSH DSMOVAX,0PUSH AXMOV AX,DATAMOV DS,AXMOV DX,OFFSETSNAMEMOVAH,9INT21HMOV AL,0B6HOUT43H,ALMOVBP,OFFSETTIMEMOV SI,OFFSETFREQ第第1010章章 汇编语言程序设计实例汇编语言程序设计实例 SONG:MOVDI,SICMP DI,?1JZEXITMOVBX,DS:BPCALLCSOUNDINCSIINCSIINCBPINCBPJMPSONG第第1010章章 汇编语言程序设计实例汇编语言程序设计实例 EXIT:RETCSOUNDPROCNEARPUSHAXPUSHBXPUSHCXPUSHDXPUSHSIMOVDX,12HMOVAX,34DCHDIV DIOUT 42H,AL第第1010章章 汇编语言程序设计实例汇编语言程序设计实例 MOV AL,AHOUT 42H,ALINAL,61HMOVAH,ALORAL,03HOUT 61H,ALMOVBX,3FFFHDLY0:MOVCX,32717DLY1:LOOPDLY1第第1010章章 汇编语言程序设计实例汇编语言程序设计实例 DEC BXJNZ DLY0MOV AL,AHOUT 61H,ALPOP SIPOPDXPOPCXPOPBXPOPAXRET第第1010章章 汇编语言程序设计实例汇编语言程序设计实例 CSOUNDENDPPLAYENDPCODEENDSENDPLAY第第1010章章 汇编语言程序设计实例汇编语言程序设计实例 例10-5的演奏程序比较简单,如果想演奏另一乐曲,只需将数据段中频率数据表Freq、节拍数据表Time和乐曲名SNAME换成另一个乐曲的频率、节拍和乐曲名即可。音乐的质量取决于三个指标,即音量、音质和音调。微机的扬声器(Speaker)是不具备音量控制功能的;由于8254发出的是方波,驱动前后未加滤波处理,再有现在大多微机使用压电陶瓷扬声器,因此,所发出的声音单调、呆板、干瘪,谈不上什么音乐;音调(即声音频率)的产生是由硬件设备完成的,由于微机的继承性(向下兼容),各档次微机所发音调是准确的。第第1010章章 汇编语言程序设计实例汇编语言程序设计实例 如果要求高质量的音乐,则只能由多媒体设备来完成,具体参见多媒体技术教材。上述两个音乐演奏程序的节奏(节拍时间长短)与微机的机型和主频有关。其原因是:节拍时间的长短是用软件延时完成的,由于机型不同,指令LOOP的执行时间长短也不同,目前应用的微机由于各种因素,从80386Pentium4(P),主频从40MHz2GHz以上的机型共同存在着,这样软件延时时间就要因机型而异。例如,P4微机比P微机速度快,而同一档次的机器主频又有区别。第第1010章章 汇编语言程序设计实例汇编语言程序设计实例 例如,P4微机有的主频为1GHz,而有的为2.4GHz,显然主频2.4GHz的P4比主频1GHz的P4要快,因此为了取得合适的演奏节拍,必须根据具体的机器来选择合适的内外循环次数,即调节延时软件DLY中BX和CX的数值。通常是高档次微机循环的次数多,同档次微机中,主频高的比主频低的循环次数多。选择了适当的循环次数,就能达到控制演奏节奏的目的。第第1010章章 汇编语言程序设计实例汇编语言程序设计实例 10.3 数据通信系统程序设计数据通信系统程序设计10.3.1并行通信口I/O【例10-6】应用BIOS和DOS功能调用,编写一个简单的打字程序。要求把从键盘上接收的字符显示在屏幕上,并由打印机输出,在键盘上按下Esc键,即退出程序。程序流程图如图10.8所示。程序的清单如下:第第1010章章 汇编语言程序设计实例汇编语言程序设计实例 NAME例10-6.ASM.MODELSMALL.STACK.DATAINTR_INSGDBYOU ARE USING A TYPER SLTNULATOR.DBTOQUITTHISPROGRAM,13,10,$第第1010章章 汇编语言程序设计实例汇编语言程序设计实例 PROMPT_MSGDB9EH,10H,$KEY_ESCEQU 1BHKEY_CREQU 0DHKEY_IFEQU 0AH.CODEPRINTMACROSTR_ADDRPUSHDXPUSHAXLEADX,STR_ADDR第第1010章章 汇编语言程序设计实例汇编语言程序设计实例 MOV AH,09INT21HPOPAXPOPDXENDMINCLUDECLS.INCMAINROCFARSTI第第1010章章 汇编语言程序设计实例汇编语言程序设计实例 图10.8例10-6流程图第第1010章章 汇编语言程序设计实例汇编语言程序设计实例 CLDMOVAH,0MOV DX,0INT17HCALL CLEAR_SCREENMOVAX,DATAMOVDS,AXMOVDX,0MOVAH,2INT10HPRINT INTR_INSGPRINT PROMPT_MSG第第1010章章 汇编语言程序设计实例汇编语言程序设计实例 GET_CH:MOVAH,1INT21HCMPAL,0JZ GET_CHCMP AL,KEY_EscJZEXITMOVDL,ALMOVAH,5INT21HCMPAL,KEY_CRJNZ GET_CH第第1010章章 汇编语言程序设计实例汇编语言程序设计实例 MOVDL,KEY_LFMOV AH,2INT21HMOV AH,5INT21HPRINTPROMPT_MSGJMP GET_CHEXIT:MOV AX,4C00HINT21HMAINENDPENDMAIN第第1010章章 汇编语言程序设计实例汇编语言程序设计实例 10.3.2串行通信接口I/O利用BIOSINT14H,通过COM端口与另一台PC机通信。其过程如下:(1)用INT14N,AH=1,AL=字符,发送一个字符。(2)为了接收字符,用INT 14H,AH=3来获得C- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 汇编程序 设计 实例
咨信网温馨提示:
1、咨信平台为文档C2C交易模式,即用户上传的文档直接被用户下载,收益归上传人(含作者)所有;本站仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。所展示的作品文档包括内容和图片全部来源于网络用户和作者上传投稿,我们不确定上传用户享有完全著作权,根据《信息网络传播权保护条例》,如果侵犯了您的版权、权益或隐私,请联系我们,核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
2、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据,个别因单元格分列造成显示页码不一将协商解决,平台无法对文档的真实性、完整性、权威性、准确性、专业性及其观点立场做任何保证或承诺,下载前须认真查看,确认无误后再购买,务必慎重购买;若有违法违纪将进行移交司法处理,若涉侵权平台将进行基本处罚并下架。
3、本站所有内容均由用户上传,付费前请自行鉴别,如您付费,意味着您已接受本站规则且自行承担风险,本站不进行额外附加服务,虚拟产品一经售出概不退款(未进行购买下载可退充值款),文档一经付费(服务费)、不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
4、如你看到网页展示的文档有www.zixin.com.cn水印,是因预览和防盗链等技术需要对页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有水印标识(原文档上传前个别存留的除外),下载后原文更清晰;试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓;PPT和DOC文档可被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;PDF文档不管是原文档转换或图片扫描而得,本站不作要求视为允许,下载前自行私信或留言给上传者【快乐****生活】。
5、本文档所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用;网站提供的党政主题相关内容(国旗、国徽、党徽--等)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
6、文档遇到问题,请及时私信或留言给本站上传会员【快乐****生活】,需本站解决可联系【 微信客服】、【 QQ客服】,若有其他问题请点击或扫码反馈【 服务填表】;文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“【 版权申诉】”(推荐),意见反馈和侵权处理邮箱:1219186828@qq.com;也可以拔打客服电话:4008-655-100;投诉/维权电话:4009-655-100。
1、咨信平台为文档C2C交易模式,即用户上传的文档直接被用户下载,收益归上传人(含作者)所有;本站仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。所展示的作品文档包括内容和图片全部来源于网络用户和作者上传投稿,我们不确定上传用户享有完全著作权,根据《信息网络传播权保护条例》,如果侵犯了您的版权、权益或隐私,请联系我们,核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
2、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据,个别因单元格分列造成显示页码不一将协商解决,平台无法对文档的真实性、完整性、权威性、准确性、专业性及其观点立场做任何保证或承诺,下载前须认真查看,确认无误后再购买,务必慎重购买;若有违法违纪将进行移交司法处理,若涉侵权平台将进行基本处罚并下架。
3、本站所有内容均由用户上传,付费前请自行鉴别,如您付费,意味着您已接受本站规则且自行承担风险,本站不进行额外附加服务,虚拟产品一经售出概不退款(未进行购买下载可退充值款),文档一经付费(服务费)、不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
4、如你看到网页展示的文档有www.zixin.com.cn水印,是因预览和防盗链等技术需要对页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有水印标识(原文档上传前个别存留的除外),下载后原文更清晰;试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓;PPT和DOC文档可被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;PDF文档不管是原文档转换或图片扫描而得,本站不作要求视为允许,下载前自行私信或留言给上传者【快乐****生活】。
5、本文档所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用;网站提供的党政主题相关内容(国旗、国徽、党徽--等)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
6、文档遇到问题,请及时私信或留言给本站上传会员【快乐****生活】,需本站解决可联系【 微信客服】、【 QQ客服】,若有其他问题请点击或扫码反馈【 服务填表】;文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“【 版权申诉】”(推荐),意见反馈和侵权处理邮箱:1219186828@qq.com;也可以拔打客服电话:4008-655-100;投诉/维权电话:4009-655-100。
关于本文