使用 PC 扬声器生成音乐音调
Generating music tone using PC speaker
我有这个代码:
IDEAL
MODEL small
STACK 100h
DATASEG
CODESEG
PROC PLAY
mov al, 182
out 43h, al
out 42h, al
mov al, ah
out 42h, al
in al, 61h
or al, 00000011b
out 61h, al
mov bx, 15
pauseSound:
mov cx, 65535
pause2:
dec cx
jne pause2
dec bx
jne pauseSound
in al, 61h
and al, 11111100b
out 61h, al
RET
END PLAY
start:
mov ax, 2712
call PLAY
MOV AX, 3834
call PLAY
exit :
mov ax, 4C00h
int 21h
END start
该程序需要播放一种声音几秒钟,然后播放另一种声音几秒钟。但是我只听到第一个而不是第二个,problem/bug在哪里?
谢谢
指令 END
告诉 TASM 中断程序集,它也指定了程序入口点。 TASM 源代码中应该只有一个这样的指令,通常在最后一行。由于您的拼写错误,TASM 仅汇编了子例程 PLAY
,它不够智能,无法警告您 PROC PLAY
未正确终止。
将 END PLAY
更改为 ENDP PLAY
,您的程序将运行。
更新:
我用
组装了你的程序
> tasm Meow.asm
Turbo Assembler Version 4.0 Copyright (c) 1988, 1993 Borland International
Assembling file: Meow.asm
Error messages: None
Warning messages: None
Passes: 1
然后在 Windows 10 64 位的 DOSBox 中链接并 运行:
> ver
> DOSBox version 0.74-2. Reported DOS version 5.00.
> tlink Meow.obj
Turbo Link Version 3.01 Copyright (c) 1987,1990 Borland International
> Meow.exe
>
它播放了高音和低音两个音调,每个音调大约 0.8 秒,然后退出,完全符合预期。
如果它在您的系统上播放时间很短,请尝试增加计时常数 mov bx, 15
。您还可以在 pause2
处添加一些虚拟指令,但通常,通过 jne pause2
测量时间在较新的计算机上非常不可靠,尤其是在模拟器上。
我有这个代码:
IDEAL
MODEL small
STACK 100h
DATASEG
CODESEG
PROC PLAY
mov al, 182
out 43h, al
out 42h, al
mov al, ah
out 42h, al
in al, 61h
or al, 00000011b
out 61h, al
mov bx, 15
pauseSound:
mov cx, 65535
pause2:
dec cx
jne pause2
dec bx
jne pauseSound
in al, 61h
and al, 11111100b
out 61h, al
RET
END PLAY
start:
mov ax, 2712
call PLAY
MOV AX, 3834
call PLAY
exit :
mov ax, 4C00h
int 21h
END start
该程序需要播放一种声音几秒钟,然后播放另一种声音几秒钟。但是我只听到第一个而不是第二个,problem/bug在哪里?
谢谢
指令 END
告诉 TASM 中断程序集,它也指定了程序入口点。 TASM 源代码中应该只有一个这样的指令,通常在最后一行。由于您的拼写错误,TASM 仅汇编了子例程 PLAY
,它不够智能,无法警告您 PROC PLAY
未正确终止。
将 END PLAY
更改为 ENDP PLAY
,您的程序将运行。
更新: 我用
组装了你的程序> tasm Meow.asm
Turbo Assembler Version 4.0 Copyright (c) 1988, 1993 Borland International
Assembling file: Meow.asm
Error messages: None
Warning messages: None
Passes: 1
然后在 Windows 10 64 位的 DOSBox 中链接并 运行:
> ver
> DOSBox version 0.74-2. Reported DOS version 5.00.
> tlink Meow.obj
Turbo Link Version 3.01 Copyright (c) 1987,1990 Borland International
> Meow.exe
>
它播放了高音和低音两个音调,每个音调大约 0.8 秒,然后退出,完全符合预期。
如果它在您的系统上播放时间很短,请尝试增加计时常数 mov bx, 15
。您还可以在 pause2
处添加一些虚拟指令,但通常,通过 jne pause2
测量时间在较新的计算机上非常不可靠,尤其是在模拟器上。