![]() | 第11章 更高级的技术 | -307- | |||||||||||||||||||
main code |
mov int mov int endp ends end |
ax,251ch 21h dx,offset install 27h main |
;结束程序并驻留 |
||||||||||||||||||
CPU之所以能够一边放音乐一边做其它工作,还有一个重要的原因就是定时器的发声通道可以独立工作。只要CPU给定时器设定了参数N并打开了定时器,则声音就会连续不断的发出,此时CPU就可以进行其它工作而不必再参与声音的产生。剩下的工作就是每隔55MS关照一下正在播放的音符,看看是否应该播放下一个音符了。 至此有关内存驻留技术的讨论可以告一段落,注意内存驻留技术最关键的两点--程序驻留与中断驱动。本书给出的程序例利用了系统一些很有特色的中断,实际上驻留内存的程序可以由任意的中断来驱动,比如DOS系统中的磁盘高速缓存程序SMARTDRV就是重编了"13H"中断服务程序来工作的。 |
|||||||||||||||||||||
11.2 内存分配技术 | |||||||||||||||||||||
试想一个程序如果需要开辟一个32KB的大缓冲区用于处理磁盘文件,那么这个程序应该如何编写呢?按前面我们讨论过的内容,这个程序可以写成下面这样: | |||||||||||||||||||||
LARGE.ASM data msg buffer data code main |
segment assume db db ends segment assume proc push xor push mov mov lea mov |
ds:data 'I have a large buffer- 32768 dup (?) cs:code far ds ax,ax ax ax,data ds,ax dx,msg ah,9 |
-32KB--ha! ha! ha!',0dh,0ah,07h,24h ;定义一个32KB的缓冲区 ;初始化堆栈 ;初始化DS寄存器 ;显示字符串MSG |
||||||||||||||||||
Copyright © 2004-2015 Reanimator | www.cookmoon.org |