![]() | 第4章 奇妙的声音 | -57- | |||||||||||||||||||
小于+127,仅占一个字节,因此,编译程序便自动地将另一个字节置成"90H",于是在可执行程序中就有了"NOP"指令。 如果不想程序中出现"NOP"指令,那么就必须在源程序中明确指出"JMP"指令是"短程"跳转,这只需将第一条指令改写成"JMP SHORT START"即可,指令中的"SHORT"就是告诉编译程序将此处的"JMP"指令处理为短程转移。 | |||||||||||||||||||||
4.2 精确定时 | |||||||||||||||||||||
在4.1节中我们已经讨论了如何通过定时器的通道3发出确定频率的声音,这一节我们要一起学习怎样精确地定时,这样才能解决演奏音乐的问题。 PC中的定时电路有三个通道,通道3用于发声,通道1用于控制系统内部的时钟。大家都十分清楚用DOS的"TIME"命令可以观察并修改系统内部的一个时钟,这个时钟之所以能连续运转主要依靠定时器的通道1。 通道1的工作方式和通道3一样,但是系统启动时设定其发出一个频率固定为18.2Hz的信号,这个信号直接送到系统中的"中断控制器"。每一个"Hz"都产生一个硬件中断,一般称这个硬中断为"IRQ0",对应的中断号是08H。也就是说,当计算机启动后,我们的机器看上去十分平静,但实际上CPU非常忙碌。在定时器的控制下每隔55毫秒就要执行一个08H号中断,这个中断的主要工作就是连续地计数。 在内存"0040H:006CH"处有四字节的存储空间专门用于保存计数值,CPU每执行一次08H中断,这四字节的计数值就被加1,不难算出这个计数值每增加1091后时间恰好过了1分钟,每增加65454后时间恰好过了1小时。系统内部的时钟之所以能准确走时,靠得就是08H中断和这四字节的计数值。因此我们要想精确的定时,必须依靠时钟计数值才行。 程序PROG9.ASM是一个能准确发出1000Hz声音的程序,声音持续时间为5秒钟。这个程序中又出现了一条新的指令: | |||||||||||||||||||||
![]() |
助记符:ADD(add) 用 途:将两个数据相加 格 式:ADD 寄存器,立即数 ADD 寄存器,存储单元 ADD 寄存器,寄存器 ADD 存储单元,立即数 ADD 存储单元,寄存器 执 行:两个数据相加,结果保存在左边的寄存器或存储单元中,右边数据不变。 |
||||||||||||||||||||
PROG9.ASM PORT_B code main |
equ segment assume org proc |
61H cs:code,ds:code 100h near |
|||||||||||||||||||
Copyright © 2004-2015 Reanimator | www.cookmoon.org |