![]() | 第4章 奇妙的声音 | -77- | |||||||||||||||||||
main code |
endp ends end |
main |
|||||||||||||||||||
程序中多了一条指令--ROR,这是一个移位指令,但它和前面讲的SHL不同,它可以完成循环移位: | |||||||||||||||||||||
![]() |
助记符:ROR(Rotate right) 用 途:将寄存器或内存中的数据循环右移 格 式:ROR 寄存器,1 ROR 寄存器,CL ROR 存储单元,1 ROR 存储单元,CL 执 行:寄存器或内存中的数据各个位顺次右移,移出去的数位返回到寄存器或存储单元的最左端 |
||||||||||||||||||||
图4-5(a)表示了这条指令的动作情况。与这条指令功能相反的指令是: | |||||||||||||||||||||
![]() |
助记符:ROL(Rotate left) 用 途:将寄存器或内存中的数据循环左移 格 式:ROL 寄存器,1 ROL 寄存器,CL ROL 存储单元,1 ROL 存储单元,CL 执 行:寄存器或内存中的数据各个位顺次左移,移遇去的数位返回到寄存器或存储单元的最右端 |
||||||||||||||||||||
图4-5(b)表示了此指令的动作情况。 | |||||||||||||||||||||
![]() 图4-5 循环移位指令的执行情况 |
|||||||||||||||||||||
WHITE程序的原理十分简单,我们在前面编制过通过61H端口的bit1位发声的程序,那些程序都是用LOOP指令控制声音频率,其循环次数是固定的。如果用一个随机数作循环计数,则产生的声音频率也是随机的,这就相当于将许多频率无规律地混合,从而产生噪音。 如何产生一个随机数?WHITE程序采用的是"种子"算法。即首先在DX寄存器中放入初值140H,这个初值称为"种子"(SEED),而后每次需要一个随机数时就将"种子"加上9248H,并循环右移三位,这样就产生了一个随机数,保留这个随机数作为新的"种子"以备后用。至于指令AND CX,0FFFH和OR CX,10H是用于限制随机数的取值范围,从而使声音频率在一定范围内变化。程序开始设定在BX中的循环计数值用于控制噪音的长短,适当减小此值可以听到一声爆炸声,下面的程序产生连续的爆炸声,也就是枪声。 |
|||||||||||||||||||||
Copyright © 2004-2015 Reanimator | www.cookmoon.org |