-306- | PC机汇编语言实战精解 | ![]() |
|||||||||||||||||||
play_next: return: play_end: install: |
dec jmp in and out mov shl mov cmp jz mov inc xor shl mov add mov out mov out in or out pop pop pop iret mov jmp mov |
byte ptr cs:[delay] return al,61h al,0fch 61h,al bx,cs:[nxtnote] bx,1 ax,word ptr cs:note[bx] ax,-1 play_end cs:[delay],ah word ptr cs:[nxtnote] ah,ah ax,1 si,offset freq si,ax ax,word ptr cs:[si] 42h,al al,ah 42h,al al,61h al,03h 61h,al si bx ax cs:[curnote],0 return dx,offset new_1ch |
;将当前音符的持续时间减1 ;退出中断服务程序 ;关闭时间 ;取得将要演奏的音符在乐谱中的位置 ;从乐谱中取出音符及时间 ;乐谱已经演奏完了吗? ;若乐谱已结束,转PLAY_END ;将这个音符的时间送入DELAY ;NXTNOTE指向下一个音符 ;将AL中的音符转成16位数据 ;将音符乘2,准备在频率表中取N值 ;SI寄存器指向频率表首 ;加上AX中的偏移量 ;取出N值并输出至定时器 ;启动定时器发声 ;恢复寄存器 ;退出中断服务程序 ;若乐谱已奏完,从头开始演奏 ;退出中断服务程序 ;设置新的1CH中断向量 |
||||||||||||||||||
Copyright © 2004-2015 Reanimator | www.cookmoon.org |