ВУЗ:
Составители:
92
ton2 endp ; Конец процедуры генерации звука 2
kbin proc near ; Ввод с клавиатуры и проверка на выбор игры
; Процедура совпадает с одноименной в задаче 2.4.2.1.
kbin endp
code ends ; Конец сегмента (кодового)
END Start ; Указание на точку входа
Задача 3.4.2.3. Написать программу, издающую различные звуки при
нажатии на клавиши '1' и '2'. Для генерации звука следует выход канала 2
таймера. Выход из программы должен осуществляться по нажатию
клавиши 'q'. Использовать прерывание от таймера.
Assume CS: Code, DS: Code
Code SEGMENT
org 100h
.286
Start proc near ; Основная процедура
mov ax,cs
mov ds,ax ; DS = CS
jmp beg ; "Перескок" через переменные
frequency equ 0500h ; Коэффициент деления
iniflag db 0 ; Флаг звучания
old_int1c_off dw 0 ; Смещение старого вектора
old_int1c_seg dw 0 ; Сегмент старого вектора
beg: ; Сохранение старого вектора прерывания 1Сh
mov ax,35h ; Функция взятия вектора
mov al,1ch ; Вектор 1Сh
int 21h ; Вызов функции DOS
mov cs:old_int1c_off,bx ; Запись смещения
mov cs:old_int1c_seg,es ; Запись сегмента
; Установка в вектор прерывания адреса новой
; программы обработки прерывания
lea dx,new_int1c ; Запись нового вектора
1c
mov ah,25h ; Функция установки вектора прерыв.
mov al,1ch ; Номер вектора прерывания
int 21h ; DS:DX – адрес новой программы обр.
beg1: call kbin ; Опрос клавиатуры
cmp al,'1' ; = '1' ?
jnz beg2 ; Нет
mov byte ptr iniflag,1 ; Взведение флага звуч.
jmp beg1 ; Переход на начало цикла
beg2: cmp al,'2' ; = '2' ?
jnz beg3 ; Нет
mov byte ptr iniflag,0 ; Сброс флага звуч.
jmp beg1 ; Переход на начало цикла
beg3: cmp al,'q' ; = 'q' ?
92
ton2 endp ; Конец процедуры генерации звука 2
kbin proc near ; Ввод с клавиатуры и проверка на выбор игры
; Процедура совпадает с одноименной в задаче 2.4.2.1.
kbin endp
code ends ; Конец сегмента (кодового)
END Start ; Указание на точку входа
Задача 3.4.2.3. Написать программу, издающую различные звуки при
нажатии на клавиши '1' и '2'. Для генерации звука следует выход канала 2
таймера. Выход из программы должен осуществляться по нажатию
клавиши 'q'. Использовать прерывание от таймера.
Assume CS: Code, DS: Code
Code SEGMENT
org 100h
.286
Start proc near ; Основная процедура
mov ax,cs
mov ds,ax ; DS = CS
jmp beg ; "Перескок" через переменные
frequency equ 0500h ; Коэффициент деления
iniflag db 0 ; Флаг звучания
old_int1c_off dw 0 ; Смещение старого вектора
old_int1c_seg dw 0 ; Сегмент старого вектора
beg: ; Сохранение старого вектора прерывания 1Сh
mov ax,35h ; Функция взятия вектора
mov al,1ch ; Вектор 1Сh
int 21h ; Вызов функции DOS
mov cs:old_int1c_off,bx ; Запись смещения
mov cs:old_int1c_seg,es ; Запись сегмента
; Установка в вектор прерывания адреса новой
; программы обработки прерывания
lea dx,new_int1c ; Запись нового вектора 1c
mov ah,25h ; Функция установки вектора прерыв.
mov al,1ch ; Номер вектора прерывания
int 21h ; DS:DX – адрес новой программы обр.
beg1: call kbin ; Опрос клавиатуры
cmp al,'1' ; = '1' ?
jnz beg2 ; Нет
mov byte ptr iniflag,1 ; Взведение флага звуч.
jmp beg1 ; Переход на начало цикла
beg2: cmp al,'2' ; = '2' ?
jnz beg3 ; Нет
mov byte ptr iniflag,0 ; Сброс флага звуч.
jmp beg1 ; Переход на начало цикла
beg3: cmp al,'q' ; = 'q' ?
Страницы
- « первая
- ‹ предыдущая
- …
- 90
- 91
- 92
- 93
- 94
- …
- следующая ›
- последняя »
