汇编->MUSIC主机声音调用

 

//功能:用汇编实现主机声音的调用
//时间:2008.03.10
//学习内容:

主要程序段:

code segment
assume cs:code
D1=131
D2=147
D3=165
D4=175
D5=196
D6=220
D7=247
Z1=262
Z2=294
Z3=330
Z4=349
Z5=392
Z6=440
Z7=494
G1=523
G2=587
G3=659
G4=714
G5=784
G6=880
G7=988
oldint8 dd ?
oldint9 dd ?
time    dw 0
ascii   DB 10H,11H,12H,13H,14H,15H,16H
        DB 1EH,1FH,20H,21H,22H,23H,24H
        DB 2CH,2DH,2EH,2FH,30H,31H,32H
music   dw d1,d2,d3,d4,d5,d6,d7
        dw z1,z2,z3,z4,z5,z6,z7
        dw g1,g2,g3,g4,g5,g6,g7
newint8: dec  cs:word ptr time
         jz closev
 new8_0: jmp cs:oldint8
 closev: push ax
         in al,61h
         and al,0fdh
         out 61h,al
         pop ax
         jmp new8_0
  voice: mov cx,ax
         mov dx,12h
         mov ax,34dch
         div cx
         push ax
         mov al,0b6h
         out 43h,al
         pop ax
         out 42h,al
         xchg al,ah
         out 42h,al
         in al,61h
         or al,03h
         out 61h,al
         ret
newint9: in al,60h
         push ax
         in al,61h
         or al,80h
         out 61h,al
         and al,7fh
         out 61h,al
         mov al,20h
         out 20h,al
         sti
         pop ax
         push ax
         cmp al,80h
         jb new90
         mov  cs:word ptr time,04h
         jmp quit
  new90: push cs
         pop  es
         mov di,offset ASCII
         mov cx,22d
         cld
         repnz scasb
         jcxz quit
         sub di,offset ascii
         dec di
         shl di,1
         mov ax,es:[di+music]
         mov cs:word ptr time,0h
         call voice
  quit:  pop ax
         cmp al,01h
         jnz meun
         lds dx,cs:oldint8
         mov ax,2508h
         int 21h
         lds dx,cs:oldint9
         mov ax,2509h
         int 21h
         mov ax,4c00h
         int 21h
meun:    sti
         jmp meun

start:mov ax,cs
      mov ds,ax
      mov ax,3508h
      int 21h
      mov cs:Word ptr oldint8,bx
      mov cs:word ptr oldint8+2,es
      mov ax,3509h
      int 21h
      mov cs:Word ptr oldint9,bx
      mov cs:word ptr oldint9+2,es
      mov ax,2508h
      mov dx,offset newint8
      int 21h
      mov ax,2509h
      mov dx,offset newint9
      int 21h
      jmp meun
      code ends
      end start
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值