MASM - 为什么此代码不会导致计算机发出蜂鸣声?

时间:2011-11-15 02:13:12

标签: assembly masm irvine32

我已经阅读了有关使计算机发出哔哔声的代码,但我无法让它工作。以下代码要求用户输入数字。数字显示在屏幕上,但如果用户键入非数字字符,则应发出蜂鸣声。当我运行程序并输入一个非数字字符时,它就会崩溃。

INCLUDE Irvine32.inc

.data

enterDigits     BYTE        'Please type some digits: ', 0

.code

main PROC

    mov EDX, OFFSET enterDigits
    call    WriteString

L1:</b>

    call    ReadChar
    cmp AL, 0Dh
    je  FINISHED
    cmp AL, 30h
    jl  BEEP
    cmp AL, 39h
    jg  BEEP
    call    WriteChar
    loop    L1  

BEEP:</b>

    mov AH, 02h
    mov DL, 07h
    int 21h
    jmp L1

FINISHED:</b>

    call    CRLF
    call    CRLF

exit</b>

main ENDP</b>

END main


If I replace BEEP with:

BEEP:</b>

    mov AL, 33h
    call    WriteChar
    jmp L1

键入非数字字符时将打印3。不知道这是否有所不同。

1 个答案:

答案 0 :(得分:1)

如果查看WriteChar here的源代码,可以看到它正在调用Windows API WriteConsole方法而不是使用MSDOS API。我相信您无法调用DOS API方法,因为您运行的模式与管理硬件和I / O功能的内核不兼容。

您可以尝试调整exe的兼容模式以使用Windows 95(右键单击EXE,转到“兼容性”选项卡)。