ton0 endp ; Кінець універсальної процедури
ton1 endp ; Кінець процедури генерації звука 1
ton2 endp ; Кінець процедури генерації звука 2
kbin proc near ; Ввод з клавіатури з очікуванням
mov ah,0 ; Функція 0
int 16h ; клавіатурного переривання
ret ; Вихід з процедури
kbinendp ; Кінець процедури вводу з клавіатури
code ends ; Кінець сегмента (кодового)
END Start ; Вказівка на точку входа
Завдання 2. Написати програму, що видає різні звуки при натисненні на клавіші '1' і '2'. Для генерації звуку слід використовувати вихід каналу 2 таймера. Вихід з програми повинен здійснюватися по натисненню клавіші 'q'.
Assume CS: Code, DS: Code
Code SEGMENT
org 100h
frequency1 equ 1000 ; Коефіц. ділення 1
frequency2 equ 3000 ; Коефіц. ділення 2
duration equ 50000 ; Тривалість
port_b equ 61h ; Адреса системного порта В
.286
Start proc near ; Основна процедура
movax,cs
movds,ax ; DS = CS
beg1: call kbin ; Опитування клавіатури
cmp al,'1' ; = '1' ?
jnz beg2 ; Ні
callton1 ; Звуквисоти 1
jmp beg1 ; Перехіднапочаток циклу
beg2: cmp al,'2' ; = '2' ?
jnz beg3 ; Ні
call ton2 ; Звуквисоти 2
jmp beg1 ; Перехід на початок циклу
beg3: cmp al,'q' ; = 'q' ?
jnz beg1 ; Ні
int 20h ; Вихідзпрограми
startendp ; Кінець основної процедури
ton2 procnear ; Процедура генерації звука 2
movdx,duration ; Тривалість
movdi,frequency2 ; Коефіцієнт ділення 2
jmp ton0 ; Перехід на універсальну процедуру
ton1 proc near ; Процедура генерації звука 1
mov dx,duration ; Тривалість
mov di,frequency1 ; Коефіцієнт ділення 2
; Універсальна процедура генерації звука
; DX - тривалість, DI - коефіц. ділення
ton0 proc near
cli ; Заборона переривань
; Включення динаміка і таймера
in al,61h ; Читання стану системного порта В
or al,3 ; Дозвіл звучання (біти 0 и 1)
out 61h,al ; Запис в системний порт В
; Програмування поділювача частоти 2 канала
mov ax,di ; Поділювач частоти
out 42h,al ; Мол.байт частоти канал 2 таймера
xchgal,ah ; AH AL
out 42h,al ; Ст.байт частоти канал 2 таймера
; Формування затримки
mov cx,dx ; Лічильник циклу затримки
ton01: push cx ; Команди, що використовуються тільки для
pop cx ; збільшення трив. цикла затримки
loop ton01 ; Затримка
; Виключення звука
in al,61h ; Читання стану системного порта В
and al,0fch ; Заборона звучання (биты 0 и 1)
out 61h,al ; Запис в системний порт В
sti ; Дозвіл переривань
ret ; Вихід з піроцедури
ton0 endp ; Кінець універсальної процедури
ton1 endp ; Кінець процедури генерації звука 1
ton2 endp ; Кінець процедури генерації звука 2
kbin proc near ; Ввод з клавіатури і перевірка на вибір гри
kbinendp
codeends ; Кінець сегмента (кодового)
END Start ; Вказівка на точку входу
Список литературы
Финогенов К. Г. «Самоучитель по системным функциям MS-DOS». М.: 1993.
Пирогов В. Ю. «Ассемблер. Учебный курс».
В контрольній роботі також використовувались матеріали сайту http://www.BankReferatov.ru ,перекладені на українську мову.