ВУЗ:
Составители:
98
int 21h ; DS:DX – адрес новой программы обр.
beg1: call kbin ; Опрос клавиатуры
mov byte ptr duration,1
cmp al,'1' ; = '1' ?
jnz beg2 ; Нет
mov byte ptr iniflag,1 ; Взведение флага звуч.
lea ax,mel1
mov tek_mel,ax
jmp beg1 ; Переход на начало цикла
beg2: cmp al,'2' ; = '2' ?
jnz beg3 ; Нет
mov byte ptr iniflag,1 ; Сброс флага звуч.
lea ax,mel2
mov tek_mel,ax
jmp beg1 ; Переход на начало цикла
beg3: cmp al,'q' ; = 'q' ?
jnz beg1 ; Нет
; Восстановление старого вектора 1с и выход
mov dx,old_int1c_off ; Смещение старого вектора
mov ax,old_int1c_seg ; Сегмент старого вектора
mov ds,ax ; DS:DX – адрес устанавл. вектора
mov ax,251ch ; Установка старого вектора 1ch
int 21h
int 20h
start endp
; Новый обработчик
прерывания 1ch
new_int1c proc far
pusha
dec byte ptr cs:duration
jnz ex
call muz ; Вызов процедуры извлечения звука
ex: popa
iret
new_int1c endp
muz proc near
test byte ptr cs:iniflag,0ffh ; Проверка флага
jnz muz1 ; Продолжение
muze: in al,61h ; Чтение состояния системного порта В
and al,0fch ; Запрещение звучания (биты 0 и 1)
out 61h,al ; Запись в системный порт В
ret ; Выход, если флаг не взведен
muz1: mov si,cs:tek_mel ; Адрес текущей ноты
mov bx,word ptr cs:[si] ; BL -текущая нота, BH – длительность
mov cs:duration,bh ; Длит. в системную переменную
cmp bl,255 ; Пауза ?
jnz muz2
; Выключение звука
98
int 21h ; DS:DX – адрес новой программы обр.
beg1: call kbin ; Опрос клавиатуры
mov byte ptr duration,1
cmp al,'1' ; = '1' ?
jnz beg2 ; Нет
mov byte ptr iniflag,1 ; Взведение флага звуч.
lea ax,mel1
mov tek_mel,ax
jmp beg1 ; Переход на начало цикла
beg2: cmp al,'2' ; = '2' ?
jnz beg3 ; Нет
mov byte ptr iniflag,1 ; Сброс флага звуч.
lea ax,mel2
mov tek_mel,ax
jmp beg1 ; Переход на начало цикла
beg3: cmp al,'q' ; = 'q' ?
jnz beg1 ; Нет
; Восстановление старого вектора 1с и выход
mov dx,old_int1c_off ; Смещение старого вектора
mov ax,old_int1c_seg ; Сегмент старого вектора
mov ds,ax ; DS:DX – адрес устанавл. вектора
mov ax,251ch ; Установка старого вектора 1ch
int 21h
int 20h
start endp
; Новый обработчик прерывания 1ch
new_int1c proc far
pusha
dec byte ptr cs:duration
jnz ex
call muz ; Вызов процедуры извлечения звука
ex: popa
iret
new_int1c endp
muz proc near
test byte ptr cs:iniflag,0ffh ; Проверка флага
jnz muz1 ; Продолжение
muze: in al,61h ; Чтение состояния системного порта В
and al,0fch ; Запрещение звучания (биты 0 и 1)
out 61h,al ; Запись в системный порт В
ret ; Выход, если флаг не взведен
muz1: mov si,cs:tek_mel ; Адрес текущей ноты
mov bx,word ptr cs:[si] ; BL -текущая нота, BH – длительность
mov cs:duration,bh ; Длит. в системную переменную
cmp bl,255 ; Пауза ?
jnz muz2
; Выключение звука
Страницы
- « первая
- ‹ предыдущая
- …
- 96
- 97
- 98
- 99
- 100
- …
- следующая ›
- последняя »
