目录 上一页 下一页 附录A

第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

目录 上一页 下一页 附录A