Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 09.04.2023, 13:14   #1
ChestIotVaga
Пользователь
 
Регистрация: 21.11.2022
Сообщений: 84
Радость выводе на экран строки сопровождение звукового сигнал

помогите скажите что не так я хотел сделать при выводе на экран строки сопровождение звукового сигнал но что то не работает выводиться строка а звука нет помогите прошу
Код:
.MODEL small
.STACK 100h

.DATA
    msg DB 'Hello, world!', 0Ah, 0Dh, '$'

.CODE
    start:
        mov ax, @data
        mov ds, ax

        ; выводим строку символов на экран
        lea dx, msg
        mov ah, 09h
        int 21h

        ; генерируем звуковой сигнал
        mov al, 10010000b
        out 43h, al
        mov ax, 800
        out 42h, al
        mov al, ah
        out 42h, al
        in al, 61h
        or al, 00000011b
        out 61h, al

        ; ждем 500 миллисекунд
        mov cx, 0BB80h
        mov dx, 0
        mov ah, 86h
        int 15h

        ; останавливаем звуковой сигнал
        in al, 61h
        and al, 11111100b
        out 61h, al

        mov ah, 4Ch
        int 21h
    end start
ChestIotVaga вне форума Ответить с цитированием
Старый 09.04.2023, 14:00   #2
macomics
Участник клуба
 
Регистрация: 17.04.2022
Сообщений: 1,833
По умолчанию

1) Команда должна содержать указание на чтение и запись двух байт, а также для генерации звука нужен режим 1 или 3
Код:
        mov al, 10110110b ; используем режим 3, значит при чтении в циклах задержки должен быть тот же режим
        out 43h, al
        mov dx, 800 ; Сохраним настройку для процедуры ожидания (см. ниже)
        mov cx, 100 ; звуковой сигнал 100 мс
        mov al, dl
        out 42h, al
        mov al, dh
        out 42h, al
2) Задержку лучше сделать на том же таймере
Код:
; DX = параметр настройки таймера; CX - Время ожидания, мс
;0.840336 * dx = обнуление раз в  672.2688 мкс
        push bx
        push dx
        mov ax, cx
        mov cx, dx
        mov dx, 50000
        mov bx, 42017 ; = 0.840336 * 50000 = 42016.80
        mul dx ; время, мс * 50000 = dx:ax
        div bx ; dx:ax / 42017 = ax
        mov dx, 1000
        mul dx ; ax * 1000 = время, мкс (dx:ax)
        div cx ; время, мкс (dx:ax) / количество интервалов по 0.840336 мкс
        mov bx, 1000
        mov cx, ax ; = количество интервалов для ожидания заданного количества мс
        pop dx
WAITLOOP:
        dec bx ; этот цикл нужен для задержки между опросами таймера, чтобы не выдавать на него кучу команд быстрее, чем работает его кварцевый генератор
        jnz WAITLOOP
        mov bx, 1000
        mov al, 10000110b ; Важно. Не надо изменять режим работы таймера, если хотите прочитать его счетчик
        out 43h, al
        in al, 42h
        mov ah, al
        in al, 42h
        cmp ax, dx
        mov dx, ax
        jc WAITLOOP ; таймер еще не обнулен
        loop WAITLOOP ; таймер обнулен, считаем количество
        pop bx
; когда насчитали нужное количество обнулений - прошла требуемая по времени задержка
; можно отключить таймер
        in al, 61h
        and al, -4
        out 61h, al

Последний раз редактировалось macomics; 09.04.2023 в 14:57.
macomics вне форума Ответить с цитированием
Старый 09.04.2023, 14:16   #3
ChestIotVaga
Пользователь
 
Регистрация: 21.11.2022
Сообщений: 84
По умолчанию

уже исправил спасибо) не могил бы мне помочь ещё по одному вопросу
ChestIotVaga вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
ошибка при выводе на экран одномерного массива dragodar Visual C++ 2 23.10.2013 14:28
с++ ошибка при выводе на экран одномерного массива dragodar Помощь студентам 1 20.10.2013 15:10
[C]Поменять порядок битов при выводе на экран Rydj Помощь студентам 0 12.05.2011 11:24
Как задать курсив и вид шрифта при выводе на экран? prikolist Помощь студентам 4 20.06.2008 14:54
О выводе на экран pro-john Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 2 04.03.2008 19:40