当前位置: 代码迷 >> 汇编语言 >> 一个汇编音乐程序有关问题
  详细解决方案

一个汇编音乐程序有关问题

热度:5960   发布时间:2013-02-26 00:00:00.0
一个汇编音乐程序问题
这学期做汇编的课程设计
我做的是演奏音乐程序
可是我按书上的程序就那么敲进去,可是程序没声音,很奇怪啊
是不是要改电脑的   设置,究竟用音箱发音到底需要什么呢,  
各位帮帮忙,我就要交实验了,急啊,
最好可以给我点参考的东西,就是关于这种程序到底应该怎么做的原理和
参考的简单的实例,
谢谢了
急!!!!!!!!!!!!!!

------解决方案--------------------------------------------------------
不知你实际的编码情况,有没有考虑到延时情况?
------解决方案--------------------------------------------------------
如果你是在NT的控制台(v8086)中运行的话,也就难怪了。NT对访问端口指令进行了限制,
有3种办法:

0 在实dos下运行

1 使用第三方dll winio

2 想法打开进程i/o隐射位图的相关位
------解决方案--------------------------------------------------------
还是你的主板上面没有喇叭?
------解决方案--------------------------------------------------------
发出很小声音:“嘟”的一声。
------解决方案--------------------------------------------------------
DATAS SEGMENT para 'data '
table dw 494 ;0,7.
dw 524 ;1
dw 588 ;2
dw 660 ;3
dw 698 ;4
dw 784 ;5
dw 880 ;6
dw 988 ;7
dw 1048 ;8,i
dw 440 ;9,6.
message db 'Paly the piano with number key(1-9) ,exit with space bar! ',13,10, '$ '
DATAS ENDS
STACKS SEGMENT para 'stack '
db 64 dup( 'stack... ')
STACKS ENDS
CODES SEGMENT
main proc far
ASSUME CS:CODES,DS:DATAS,SS:STACKS
START:
MOV AX,DATAS
MOV DS,AX
mov ah,9
mov dx,offset message
int 21h
new_note:
mov ah,0
int 16h
cmp al,20h ;space bar is the exit key
je exit
mov bx, offset table
cmp al, '0 '
jb new_note
cmp al, '9 '
ja new_note
and ax,000fh ;convert the ascii to an index in si ,start with zero
shl ax,1
sub ax,2
mov si,ax
mov di,[bx][si+2]
call soundf
jmp new_note

;produces a tone of a specified frequency
soundf proc near
push ax
push bx
push cx
push dx
push di
mov al,0b6h ;write timer mode reg
out 43h,al
mov dx,12h ;timer divisor
mov ax,348ch ;1193100hz/frzq
div di ;value of frzq
out 42h,al ;write timer2 count low byte
mov al,ah
out 42h,al ;write timer2 count low byte
in al,61h
mov ah,al
or al,3
out 61h,al
mov bx,100
wait1:
mov cx,633
call waitf
dec bx
jnz wait1
mov al,ah
out 61h,al
pop di
pop dx
pop cx
pop bx
pop ax
ret
soundf endp
;
waitf proc near
push ax
waitf1:
in al,61h
and al,10h
cmp al,ah
je waitf1
mov ah,al
loop waitf1
pop ax
ret
waitf endp
exit:
MOV ah,4ch
INT 21h
main endp
CODES ENDS
END START
  相关解决方案