MASM - Почему этот код не вызывает звуковой сигнал компьютера? - PullRequest
1 голос
/ 15 ноября 2011

Я прочитал о коде, чтобы компьютер подал звуковой сигнал, но не могу заставить его работать.Следующий код просит пользователя ввести цифры.Цифры отображаются на экране, но если пользователь вводит нецифровый символ, он должен подать звуковой сигнал.Когда я запускаю программу и набираю нецифровый символ, он просто падает.

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 Ответ

1 голос
/ 15 ноября 2011

Если вы посмотрите на источник для WriteChar здесь , вы увидите, что он вызывает метод WriteConsole Windows API, а не использует MSDOS API. Я полагаю, что вы не сможете вызвать метод DOS API, потому что вы работаете в режиме, несовместимом с ядром, управляющим оборудованием и функциями ввода / вывода.

Вы можете попробовать настроить режим совместимости вашего exe-файла для использования Windows 95 (щелкните правой кнопкой мыши по EXE, перейдите на вкладку «Совместимость»).

...