目录 上一页 下一页 附录A

-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

目录 上一页 下一页 附录A