汇编程序发不出声音!怎么回事??

nichothia 2010-08-18 02:25:15
在42h端口写入数据改变声音频率,在61h写入3 打开定时器和与门逻辑电路,编译和链接都通过了 ,可是发不出声音是怎么回事?(我用的是XP系统)


assume cs:code

code segment
start:
in al,43h
mov dx,04a9h
call sound

out 43h,al
mov al,bl
out 61h,al

int 21h
mov ax,4c00h

sound:
push ax
push dx

mov ax,0b6h
out 43h,al
mov ax,dx
out 42h,al
mov al,ah
out 42h,al
or bl,00000011b
mov al,bl
out 61h,al
call delay


pop dx
pop ax
ret


delay:
mov ah,0
int 1ah
add dx,182
mov bx,dx
s: int 1ah
cmp dx,bx
jne s
in al,61h
and al,11111100b
out 61h,al

ret

code ends
end start





...全文
178 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
通过快速修改频率来造成振动叠加,也可以使PC喇叭发出合声,早期的某些游戏,象三国演义、crimewave等,就用此方法实现语音、音乐效果。
丰满 2010-09-13
  • 打赏
  • 举报
回复
简单的频率的改变,是不能发出声音的,只是滴 哒的声音
时间一粒 2010-08-26
  • 打赏
  • 举报
回复
哇,厉害!看看,学习!
goodider 2010-08-26
  • 打赏
  • 举报
回复
对61h端口的I/O控制可以控制早期的PC喇叭方波声音发生器,它不是用来控制声卡的,由于只能控制声音频率,它只能发出比较单调的音乐,不能进行音幅控制、谐波处理、声音合成等,更无从谈语音合成了,现在的许多电脑已经废除了原来的PC喇叭,或者喇叭线有但是没有正常接到主板上,你可以打开检查一下;另外,由于这类汇编程序直接控制硬件端口,一般只能在实模式的DOS环境下才能正确运行,在XP等的虚拟DOS环境下相当于空操作,不能发出声音

21,459

社区成员

发帖
与我相关
我的任务
社区描述
汇编语言(Assembly Language)是任何一种用于电子计算机、微处理器、微控制器或其他可编程器件的低级语言,亦称为符号语言。
社区管理员
  • 汇编语言
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧