2.3.2 Используемые методы
В начале программы происходит инициализация сегментного регистра CS. Все данные, которые описаны в программе, размещаются в регистре команд. После запуска программы на экран выводится сообщение. Происходит сохранение старого вектора прерывания и инициализации нового. В зависимости от выбора пользователя, после опроса клавиатуры, программа продолжает работу и передает текущую ноту в регистр-аккумулятор, либо происходит восстановление прерывания и выход их программы. Выход из программы происходит при нажатии кнопки “q”. Основная процедура программы - Start proc (см.Приложение 1, стр. 22).
Ниже описаны подпрограммы, которые вызывают в главной:
- new_int1c proc near – новый обработчик прерываний (см. Приложение 1, стр.23).
Происходит сохранение всех регистров, вызывается процедура генерации звука, восстановление всех регистров и происходит возврат из программы обработки прерывания.
- kbin proc near - проверка введенного символа для дальнейшей передачи управления(см. Приложение 1, стр.24).
Происходит вызов клавиатурного прерывания для считывания символа и выход из процедуры.
- muz proc near – процедура извлечения очередного звука (см. Приложение 1, стр.23).
Первым делом осуществляется проверка, установлена ли переменная iniflag (она используется как флаг). Если нет, что считывается состоянии системного порта РВ ППИ, в 0 и 1 бит заносятся 0 и записывается обратно в порт. Таким образом происходит запрет звучания.
Если флаг установлен, то считывается текущая нота. Если она равно 255 (то есть это пауза), то происходит запрету звучания и продолжение считывания нот. В противном случае проверяется, если нота равно 0 (то есть конец массива нот), то происходит переход на начало выполнения программы и происходит выход, если флаг не возведен.
Если текущая нота не равно 255 или 0, то происходит считывание частоты ноты, младший и старший байты которой заносятся во второй канал таймера. Далее происходи разрешение звучания, то есть считывается значение системного порта РВ ППИ, в 0 и 1 бат заносятся единицы и отправляется обратного в порт. И происходит нормальный выход из процедуры.
2.3.3 Вызов и загрузка
Вызов программы осуществляется путём запуска файла «kur.exe». Если файл не существует, его необходимо скомпилировать из файла исходного текста программы под названием «kur.asm».
2.3.4 Входные данные
Входными данными программы является ввод пользователем пункта меню.
2.3.5 Выходные данные
Выходными данными программы является звуковой сигнал динамика. Так же на экран выводится простое пользовательское меню.
3. ТЕХНОЛОГИЧЕСКАЯ ЧАСТЬ
3.1 Общие сведения
Для создания курсовой работы использовалось следующее программное обеспечение:
· Компилятор TASM
· Компоновщик Tlink.exe
· Отладчик TD.EXE
· Текстовый редактор – ASM Editor
· MS Office Word 2003
· MS Office Visio 2003
3.2 Руководство системного программиста
3.2.1 Системные требования
Минимальные системные требования:
- Процессор 80286 и выше
- Оперативная память – 1 Мб
- Свободного места на жестком диске 1 Мб
- Операционная система DOS 3.3 и выше / Windows 9x/ME
- Клавиатура
- Мышь
3.2.2 Структура программы
Программа представляет собой один исходный файл для выполнения и называется Kur.exe. Она не имеет никаких связей с другими программами и работает автономно.
3.2.3 Тестирование программы
После запуска произойдет размещение программы в памяти. При наборе на клавиатуре 1 произойдет загрузка в регистр-аккумулятор мелодии «Чижик-пыжик», которая будет сгенерирована и воспроизведена через системный динамик. При наборе цифры 2 произойдет загрузка мелодии «Подмосковные вечера», которая будет воспроизводиться аналогично первому случаю. Если будет набрано «q», то произойдет завершение работы программы и выгрузка её из памяти.
3.2.4 Выходные и выходные данные
Входными данными является номер выбранного пункта меню.
Выходные данные – это сгенерированная мелодия в соответствии с выбранным пунктом.
3.3 Руководство оператора
3.3.1 Назначение программы
Данная программа предназначена для генерации звука с использованием системного таймера посредством системного динамика.
3.3.2 Выполнение программы
1. Для запуска программы необходимо запустить приложение Kur.exe
2. Выбрать любой из предложенных пунктов меню.
3. Для генерации мелодии «Чижик-Пыжик» выберите пункт 1
4. Для генерации мелодии «Подмосковные вечера» выберите пункт 2
5. Для выхода из программы выход из программы выберите пункт q
3.3.3 Сообщения оператору
При загрузке программы выводится простое пользовательское меню:
Enter the point of menu:
1- CHIZHIK-PYZHIK
2 - PODMOCKOVNYE VECHERA
q – Qiute
Если пользователь введет пункт меню, который не предусмотрен программой, то на экран будет выведено сообщение.
ЗАКЛЮЧЕНИЕ
В ходе выполнения курсовой работы было создано приложение, которое способно генерировать мелодии «Чижик-Пыжик» и «Подмосковные вечера».
Для реализации поставленной цели были реализованы следующие задачи:
- Изучены принципы работы системного таймера
- Разработаны алгоритмы для перехвата и обработки прерываний системного таймера
- Создана процедура для извлечения очередного звука
- Создана процедура для обработки символов, введенных с клавиатуры
СПИСОК ЛИТЕРАТУРЫ
1. Абель П. Язык Ассемблера для IBM PC и его программирование - М.: Высшая школа,1992. – 252с.
2. С.В. Зубков Ассемблер для DOS, Windows и Unix – М.: ДМК Пресс, 1999. – 630 с.
3. И. Юров Assembler – СПб.: Питер, 2001. – 624 с.
ПРИЛОЖЕНИЕ 1
Листинг программы
Assume CS: Code
Code SEGMENT
286
Start proc; Основная процедура
mov ax,cs
mov ds,ax; DS = CS
iniflag db 0; Флаг звучания
old_int1c_off dw 0; Смещение старого вектора
old_int1c_seg dw 0; Сегмент старого вектора
tek_mel dw?; Адрес текущей ноты выбранной мелодии
mov ax,351ch
int 21h
mov cs:old_int1c_off,bx
mov cs:old_int1c_seg,es
lea dx,new_int1c
mov ax,251ch
int 21h; DS:DX – адрес новой программы обр.
mov ah,09h
lea dx,menu
int 21h
beg1:
call kbin; Опрос клавиатуры
cmp al,'1'
jnz beg2 ; Нет
mov byte ptr iniflag,1; Взведение флага звуч.
lea ax,mel1
mov tek_mel,ax
jmp beg1; Переход на начало цикла
beg2:
cmp al,'2'
jnz beg3
mov byte ptr iniflag,1
lea ax,mel2
mov tek_mel,ax
jmp beg1
beg3:
cmp al,'q'
jnz beg4
jmp beg5
beg4:
mov ah,09h
lea dx,er
int 21h
jmp beg1
beg5:
Восстановление старого вектора 1с и выход
mov dx,old_int1c_off
mov ax,old_int1c_seg
mov ds,ax; DS:DX – адрес устанавл. вектора
mov ax,251ch
int 21h
movax,4c00h
int21h
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; Запись в системный порт В
jmp ex ; Выход, если флаг не взведен
muz1:
mov si,cs:tek_mel; Адрес текущей ноты
mov bl,cs:[si]; Текущая нота
cmp bl,255; Пауза?
jnz muz2
Выключение звука
in al,61h
and al,0fch
out 61h,al
inc cs:tek_mel; Переход к адресу след. ноты
jmp ex
muz2:
or bl,bl; = 0?
jnz muz3
jmp muze
muz3:
xor bh,bh
mov ax,cs:noty [bx]
Программирование делителя частоты 2 канала
inc cs:tek_mel; Переход к адресу след. ноты
out 42h,al; Мл.байт частоты. канал 2 таймера
xchg al,ah; AH. AL
out 42h,al; Ст. байт частоты. канал 2 таймера
Разрешение звучания
in al,61h
or al,3; Разрешение звучания (биты 0 и 1)
out 61h,al; Запись в системный порт В
ex:
ret
muz endp
kbin proc near; Ввод с клавиатуры и проверка на выбор игры
mov ah,0
int 16h
ret
kbin endp
Мелодия "Чижик Пыжик"
mel1 db 17,17,255,13,13,255,17,17,255,13,13,255,18,18,255
db 17,17,255,15,15,15,15,255,255
db 8,8,255,8,8,255,8,8,255,10,255,12,255
db 13,13,255,13,13,255,13,13,13,13
db 0
Мелодия "Подмосковные вечера"
mel2 db 1,1,1,4,4,4,8,8,8,4,4,4,6,6,6,6,6,6,4,4,4,3,3,3
db 8,8,8,8,8,8,6,6,6,6,6,6,1,1,1,1,1,1,1,1,1,1,1,1
db 0
menu db 10 dup(0ah), 30 dup(20h), 'Enter the point of menu:'
db 0dh,0ah,30 dup(20h),'1 - CHIZHIK-PYZHIK'.0dh,0ah,30 dup(20h),'2 - PODMOCKOVNYE VECHERA'.0dh,0ah,30 dup(20h), 'q - Quit',5 dup(0ah), "$ "
er db 'Incorrect input! Try again!',0dh,0ah,"$ "
Коэффициенты деления для нот
noty dw 0eeeh,0e18h,0d49h,0c8eh,0bdfh,0b2fh,0abeh
dw 9f7h,968h,8e0h,861h,7e8h,777h,70ch,6a5h,647h
dw 5edh,597h,547h,4fbh,4b4h,470h,430h,3f4h
dw 3bbh,386h,352h,323h,2f6h,2cbh,2a3h,27dh,25ah,238h,218h,1fah
dw 1ddh,1c3h,1a9h,192h,17bh,166h,152h,13fh,12dh,11ch,10ch,0fdh
dw 0
code ends
END
ПРИЛОЖЕНИЕ 2
Рис. 1 - Пользовательское меню
Рис. 2 - Некорректный ввод
... примерно 6%. В общем, в районе 1 - 4 кГц чувствительность уха по всем параметрам максимальна, и составляет не так уж и много, если брать не логарифмированные значения, с которыми приходится работать цифровой технике. Примите на заметку - многое из того, что происходит в цифровой обработке звука, может выглядеть ужасно в цифрах, и при этом звучать неотличимо от оригинала. В цифровой обработке ...
... К. Сатпаева» для просмотра и ввода информации системы оперативно-диспетчерского контроля и управления, создаваемые на Visual Basic. Специфика используемого в системе оперативно-диспетчерского контроля и управления РГП «Канал им. К. Сатпаева» ПО такая, что разработка ПО, как таковая, может производиться только при создании самой системы. Применяемое ПО является полуфабрикатом. Основная задача ...
... система обеспечивает совместное функционирование всех устройств ПК и предоставляет пользователю доступ к его ресурсам. WINDOWS 95, WINDOWS 98, WINDOWS ME, WINDOWS XP. Состав Операционной системы: 13) Программный модуль, управляющий файлами. 14) Командный процессор (выполняет команды пользователя). 15) Программы, обеспечивающие управление работой различных устройств (ввода, ...
... вычислительным сетям"; ГОСТ 11326.2-79, ГОСТ 11326.16-79; структурной схемой ЛВС; необходимыми документами по обеспечению режимных мероприятий, специальными требованиями, предъявляемыми к электронно-вычислительной технике (ЭВТ) объектов информации соответствующей категории и предписаниями на эксплуатацию. Требования к средствам вычислительной техники Стандартными средствами при оснащении объектов ...
0 комментариев