📄 yuequ.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 + -