-60- | PC机汇编语言实战精解 | ![]() |
|||||||||||||||||||
;-------- PLAY: ;-------- DELAY: |
----------------------------- MOV BX,0 MOV AL,NOTE[BX] MOV AH,DL_TIME[BX] INC BX PUSH BX PUSH AX CBW SHL AX,1 MOV BX,AX MOV AX,FREQ[BX] ----------------------------- OUT 42H,AL MOV AL,AH OUT 42H,AL IN AL,61H OR AL,3 OUT 61H,AL MOV AH,0 INT 1AH POP AX MOV AL,AH CBW ADD AX,DX MOV BX,AX MOV AH,0 INT 1AH CMP BX,DX JNZ DELAY IN AL,61H AND AL,0FCH OUT 61H,AL POP BX CMP NOTE[BX],-1 |
;设定音符数组下标初值 ;取一个音符 ;取对应节拍 ;数组指针加1 ;保存音符指针 ;保存节拍值 ;将音符转为16位 ;音符值×2,计算频率表指针 ;频率表指针置入BX ;取出对应频率值 ;输出频率值 ;开启定时器 ;取时钟计数值 ;取回节拍值 ;节拍值转为16位 ;加上当前时钟计数值,得到计数终值 ;计数终值置入BX ;取时钟计数值 ;到终值吗? ;未到,继续延时 ;延时结束,关闭定时器 ;取回音符数组指针 ;演奏结束吗? |
|||||||||||||||||||
Copyright © 2004-2015 Reanimator | www.cookmoon.org |