Смекни!
smekni.com

Вектор переривань та процедура обслуговування переривань (стр. 2 из 2)

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 ,перекладені на українську мову.