ВУЗ:
Составители:
95
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,'3' ; = '3' ?
jnz beg4 ; Нет
mov byte ptr iniflag,1 ; Сброс флага звуч.
lea ax,mel3
mov tek_mel,ax
jmp beg1 ; Переход на начало цикла
beg4: 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 ; Сохранение всех регистров
call muz ; Вызов процедура извлечения звука
popa ; Восстановление всех регистров
iret ; Возврат из программы обработки прерывания
new_int1c endp
; Процедура извлечения очередного звука
; tek_mel – адрес текущей ноты выбранной мелодии
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 bl,cs:[si] ; Текущая нота
cmp bl,255 ; Пауза ?
jnz muz2
; Выключение звука
95
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,'3' ; = '3' ?
jnz beg4 ; Нет
mov byte ptr iniflag,1 ; Сброс флага звуч.
lea ax,mel3
mov tek_mel,ax
jmp beg1 ; Переход на начало цикла
beg4: 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 ; Сохранение всех регистров
call muz ; Вызов процедура извлечения звука
popa ; Восстановление всех регистров
iret ; Возврат из программы обработки прерывания
new_int1c endp
; Процедура извлечения очередного звука
; tek_mel – адрес текущей ноты выбранной мелодии
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 bl,cs:[si] ; Текущая нота
cmp bl,255 ; Пауза ?
jnz muz2
; Выключение звука
Страницы
- « первая
- ‹ предыдущая
- …
- 93
- 94
- 95
- 96
- 97
- …
- следующая ›
- последняя »
