Системное программное обеспечение. Рощин А.В. - 94 стр.

UptoLike

Составители: 

94
Для исполнения мелодии сначала формируется массив делителей
частоты, соответствующих различным нотам звукоряда. Для нот
используются номера от 1 до 48. Условное соответствие номеров нот и их
значений показано на рисунке. Массив делителей частоты для нот
называется NOTY. Значение 0 используется в качестве признака окончания
мелодии. Значение 255 используется для обозначения паузы.
2
4
7
9 1
1
1
4
1
6
1
9
2
1
2
3
2
6
2
8
1
3
5
6
8
10
12
13
15
17
18
20
22
24
25
27
29
Номера нот и их соответствие
В программе сформированы массивы для трех мелодий – "Чижик
Пыжик" (mel1), "Подмосковные вечера" и " Кан-кан" (mel3). Длительность
элементарного звука берется равной одному "тику" таймера (примерно
1/18 сек.). Для получения большей длительности в массиве мелодии
записываются подряд несколько одинаковых нот. Для получения четко
выраженных соседних одинаковых нот используется пауза.
Assume CS: Code, DS: Code
Code SEGMENT
org 100h
.286
Start proc near ; Основная процедура
mov ax,cs
mov ds,ax ; DS = CS
jmp beg ; "Перескок" через переменные
iniflag db 0 ; Флаг звучания
old_int1c_off dw 0 ; Смещение старого вектора
old_int1c_seg dw 0 ; Сегмент старого вектора
tek_mel dw ? ; Адрес текущей ноты выбранной мелодии
beg: mov ax,351ch ; Сохранение старого вектора 1c
int 21h
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 ;
Взведение флага звуч.
                                        94



     Для исполнения мелодии сначала формируется массив делителей
частоты, соответствующих различным нотам звукоряда. Для нот
используются номера от 1 до 48. Условное соответствие номеров нот и их
значений показано на рисунке. Массив делителей частоты для нот
называется NOTY. Значение 0 используется в качестве признака окончания
мелодии. Значение 255 используется для обозначения паузы.


               2   4    7   9   1   1        1   1   2   2   2   2
                                1   4        6   9   1   3   6   8

             1 3 5 6 8 10 12 13 15 17 18 20 22 24 25 27 29
                       Номера нот и их соответствие

     В программе сформированы массивы для трех мелодий – "Чижик
Пыжик" (mel1), "Подмосковные вечера" и " Кан-кан" (mel3). Длительность
элементарного звука берется равной одному "тику" таймера (примерно
1/18 сек.). Для получения большей длительности в массиве мелодии
записываются подряд несколько одинаковых нот. Для получения четко
выраженных соседних одинаковых нот используется пауза.

Assume CS: Code, DS: Code
Code SEGMENT
       org 100h
       .286
Start proc near ; Основная процедура
       mov ax,cs
       mov ds,ax ; DS = CS
       jmp beg ; "Перескок" через переменные
iniflag db 0      ; Флаг звучания
old_int1c_off     dw 0        ; Смещение старого вектора
old_int1c_seg     dw 0        ; Сегмент старого вектора
tek_mel           dw ?        ; Адрес текущей ноты выбранной мелодии
beg: mov ax,351ch ; Сохранение старого вектора 1c
       int  21h
       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 ; Взведение флага звуч.