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

📄 yuequ.asm

📁 汇编语言课程设计
💻 ASM
字号:
datarea segment;数据段
    message db 'please choose the number of the song(choose a or b or c):$'
    music_freq dw 2 dup(262, 294, 330, 262)
          dw 2 dup(330, 349, 392)
          dw 2 dup(392, 440, 392, 349, 330, 262)
          dw 2 dup(294, 196, 262)
          dw -1
    music_time dw 2 dup(25,25,25,25)
             dw 2 dup(25, 25,50)
             dw 2 dup(12,12,12,12,25,25)
             dw 2 dup(25, 25, 50) 
             
             
    music2_freq  dw  330,392,330,294,330,392,330,294,330
            dw  330,392,330,294,262,294,330,392,294
            dw  262,262,220,196,196,220,262,294,330,262
            dw  -1
    music2_time  dw  3 dup(50),25,25,50,25,25,100
                 dw  2 dup(50,50,25,25),100
                 dw  3 dup(50,25,25),100
    
    
    music3_freq  dw 330,294,262,294,3 dup(330)
                 dw 3 dup(294),330,392,392
                 dw 330,294,262,294,4 dup(330)
                 dw 294,294,330,294,262,-1
    music3_time  dw 6 dup(25),50
                 dw 2 dup(25,25,50)
                 dw 12 dup(25),100                          
                 
datarea ends
 code segment;代码段
   main proc far
   assume cs:code,ds:datarea;指定相应的段	寄存器

start: 
   push ds;为了主程序返回DOS
   sub ax,ax;初始化
   push ax
   
   mov ax,datarea
   mov ds,ax
   sloog1:    
		   mov dl,0dh
		   mov ah,02h
		   int 21h
		   mov dl,0ah
		   mov ah,02h
		   int 21h ;回车换行
       lea dx,message
       mov ah,9h
       int 21h;打印相应的信息
       mov ah,1
       int 21h;接受键盘输入
       cmp al,'a'
       je loog1
       cmp al,'b'
       je loog2
       cmp al,'c'
       je loog3
       jmp  exit
loog1:
       lea si, music_freq
       lea bp, music_time
       jmp freq
loog2:
       lea si, music2_freq
       lea bp, music2_time
       jmp freq
loog3:
       lea si, music3_freq
       lea bp, music3_time
       jmp freq

freq: mov di, [si]
      cmp di, -1
      je end_mus
      mov bx, ds:[bp]
      call create_sound
      add si, 2
      add bp, 2
      jmp freq
end_mus: in al, 61h
         and al, 11111100b
         out 61h, al
         jmp sloog1
exit:
         ;mov ah, 4ch
         ;int 21h
         ret
         
         
         
create_sound proc near
         push ax
         push bx
         push cx
         ;push dx
         push di
         mov al, 10110110b
         out 43h, al
         mov dx, 12h
         mov ax, 34DCH  ;1193180
         div di
         out 42h, al
         mov al, ah
         out 42h, al
         
         
         in al, 61h
         or al, 3
         out 61h, al

leng:
         mov cx,0ffffh
         
cloog1:
         push cx
         mov cx,0050h
cloog2:
         loop cloog2
         pop cx
         loop cloog1
           
          dec bx
          jnz leng
          pop di
          ;pop dx
          pop cx
          pop bx
          pop ax
          ret
create_sound endp
code ends
        end start

⌨️ 快捷键说明

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