⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 music.asm

📁 设计要求同过扬声器能完整演奏一首乐曲
💻 ASM
字号:
;extrn    gensound:far

stack    segment
   db     64 dup('Stack...')
stack    ends

;_______________________________
data2    segment   para 'data'
  mess         db    'input  the  time',13,10,'$'
  mus_freq     dw    330,392,330,294,330,392,330,294,330
               dw    330,392,330,294,262,294,330,392,394
               dw    262,262,220,196,196,220,262,294,330,262
               dw    330,392,330,294,330,392,330,294,330
               dw    330,392,330,294,262,294,330,392,394
               dw    262,262,220,196,196,220,262,294,330,262
               dw    330,392,330,294,330,392,330,294,330
               dw    330,392,330,294,262,294,330,392,394
               dw    262,262,220,196,196,220,262,294,330,262
               dw    330,392,330,294,330,392,330,294,330
               dw    330,392,330,294,262,294,330,392,394
               dw    262,262,220,196,196,220,262,294,330,262
               dw    330,392,330,294,330,392,330,294,330
               dw    330,392,330,294,262,294,330,392,394
               dw    262,262,220,196,196,220,262,294,330,262
               dw    330,392,330,294,330,392,330,294,330
               dw    330,392,330,294,262,294,330,392,394
               dw    262,262,220,196,196,220,262,294,330,262
               dw    330,392,330,294,330,392,330,294,330
               dw    330,392,330,294,262,294,330,392,394
               dw    262,262,220,196,196,220,262,294,330,262
               dw    330,392,330,294,330,392,330,294,330
               dw    330,392,330,294,262,294,330,392,394
               dw    262,262,220,196,196,220,262,294,330,262               
               dw    -1
  count        db     ?               

  mus_time     dw    3 dup(25),12,12,25,12,12,50
               dw    2 dup(25,25,12)
               dw    3 dup(25,25,12)
               dw    3 dup(25),12,12,25,12,12,50
               dw    2 dup(25,25,12)
               dw    3 dup(25,25,12)
               dw    3 dup(25),12,12,25,12,12,50
               dw    2 dup(25,25,12)
               dw    3 dup(25,25,12)
               dw    3 dup(25),12,12,25,12,12,50
               dw    2 dup(25,25,12)
               dw    3 dup(25,25,12)
               dw    3 dup(25),12,12,25,12,12,50
               dw    2 dup(25,25,12)
               dw    3 dup(25,25,12)
               dw    3 dup(25),12,12,25,12,12,50
               dw    2 dup(25,25,12)
               dw    3 dup(25,25,12)
               dw    3 dup(25),12,12,25,12,12,50
               dw    2 dup(25,25,12)
               dw    3 dup(25,25,12)
               dw    2 dup(25),12,12,25,12,12,50
               dw    2 dup(25,25,12)
               dw    3 dup(25,25,12)               
               dw     100

data2    ends

;_______________________________
code2    segment  para 'code'

   assume  cs:code2,ss:stack,ds:data2
;________________________________
music    proc     far
 
    mov   ax,data2
    mov   ds,ax
l2: 
    lea   dx,mess
    mov   ah,09h
    int   21h
    
    mov   ah,01h
    int   21h
   
    mov   count,al
    sub   count,30h
   

l1:
     
    lea   si,mus_freq            ;put  the  mus_freq table offset in si
    lea   bp,ds:mus_time         ;put  the  mus_time table offset in bp

freq:
    mov   di,[si]                ;read  next  frequency
    cmp   di,-1                  ;end   of   tone
    je    end_mus                ;if  yes ,exit
    mov   bx,ds:[bp]             ;else  fetch  the duration
    call  far ptr   gensound     ;play  the  note
    add   si,2                   ;updata the table  point
    add   bp,2
    jmp   freq
end_mus:  
   
    
    
    sub   count,1
    jnz   l1

    mov   ah,07h
    int   21h
    cmp   al,71h
    jnz   l2
end1:
    mov   ax,4c00h
    int   21h

music   endp

gensound    proc   far

    push   ax
    push   bx
    push   cx                    ;save   register
    push   dx
    push   di

    mov    al,0b6h               ;write  time mode  register
    out    43h,al
    mov    dx,12h          
    mov    ax,348CH         

    div    di                    ;value  of  frequency
    out    42h,al
    mov    al,ah
    out    42h,al
    in     al,61h
    mov    ah,al
    or     al,3
    out    61h,al

wait1:
    mov    cx,2800               ;wair  for  specified  interval
delay:
    loop   delay
    dec    bx
    jnz    wait1
    mov    al,ah
    out    61h,al
    pop    di
    pop    dx
    pop    cx
    pop    bx
    pop    ax
    ret
gensound  endp

code2   ends

  end   music




























⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -