Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
КНИГА_АСМ ассемблер.doc
Скачиваний:
61
Добавлен:
19.11.2019
Размер:
732.16 Кб
Скачать

Inst: mov ah,9

mov dx,offset soob2

int 21h

mov ah,4ch

int 21h

; Область данных загрузочной части.

soob2 db 'Программа уже установлена$'

code ends

end f10

Неприятной особенностью многих резидентных программ является их критичность к операционной среде, в которой они запускаются. Зачастую резидент, успешно работающий в Volkov commander, не работает в DOS Navigator и наоборот. Это связано с тем, что мы не знаем или не учитываем специфику работы конкретной среды.

В заключение этого раздела по традиции приведем варианты заданий к лабораторной работе.

ЗАДАНИЯ К ЛАБОРАТОРНОЙ РАБОТЕ

1. Через временной интервал (например, 10 секунд) на экран выводится какое-либо сообщение. Через 10-20 секунд сооб­щение с экрана снимается, и работа ПЭВМ продолжается обычным обра­зом.

2. При нажатии любой клавиши на экран выдается просьба на­жать эту клавишу еще раз. При повторном нажатии просьба с экрана снимается, и работа ПЭВМ продолжается обычным обра­зом.

3. При нажатии клавиши ENTER в центр экрана выводится сооб­щение: "Отдыхаю, подождите минутку". Через 10-20 секунд сообщение снимается, и работа ПЭВМ продолжается обычным образом.

4. ПЭВМ реагирует на клавишу "стрелка - вверх" как на клавишу "стрелка - вниз" (и наоборот), на клавишу "стрелка - влево" как на клавишу "стрелка - вправо" (и наоборот).

5. При нажатии клавиши F1 программа очищает экран и безоста­новочно выводит на экран сообщение "Не хочу вам помогать!", прокручивая при этом экран вверх. Секунд через 10-20 этот процесс прекращается, восстанавливается экран, и работа ПЭВМ продолжается обычным образом.

6. Через равные промежутки времени (например 30 секунд) ре­зидент блокирует / разблокирует клавиатуру.

7. При нажатии клавиши Т сообщается текущее системное время.

8. Нажатие клавиши D замедляет / восстанавливает реакцию сис­темы на нажатие клавиш клавиатуры. Замедление реакции должно быть достаточным, для того чтобы его можно было заметить визуально.

9. При нажатии клавиши R очищается правая, а при нажатии L - левая половина экрана. Через 10-20 секунд после нажатия любой из этих клавиш экран восстанавливается.

10. Нажатие клавиши G меняет размер курсора. (Как правило, любая среда, в которой мы работаем, например, Dos Navigator, при возврате ей управления восстанавливает размер курсора. То есть, чтобы гарантированно увидеть наше изменение курсора, можно, например, запускать нашу программу в Command.com).

11. Нажатие клавиши I инвертирует цвета экрана.

12. После установки резидента система перестает реагировать на нажатие клавиши F7. На другие клавиши система реаги­рует обычным образом.

3.5. Работа со звуком.

В состав любой ПЭВМ фирмы IBM входит микросхема таймера i8254. Схема ее использования в ПЭВМ представлена на рис. 3.5.

Рис. 3.5

Микросхема таймера имеет три канала, соответственно каналы 0,1 и 2. Канал 0 отводится для службы системного времени, канал 1- для регенерации памяти, а канал 2- для управления работой динамика.

Порты таймера имеют следующие системные адреса:

канал 0 - 40h;

канал 1 - 41h;

канал 2 - 42h;

регистр управляющего слова (РУС) - 43h.

Через РУС производится настройка каналов, через остальные порты -загрузка/считывание информации в/из соответствующих каналов.

Для работы со звуком нам нужен канал 2 и РУС. Каналы 0 и 1 перезагружать и перенастраивать категорически запрещено, так как система может выйти из строя (во всяком случае, до перезапуска).

Работа канала 2 заключается в том, что он делит опорную частоту (fоп =1.19... МГц.) на коэффициент пересчета Кпр, который заранее загружается в канал. Получаемая fвых=fоп/Кпр подается на динамик. Надо учитывать, что работой канала 2 и подачей fвых на динамик управляют два младших бита порта 61h. Если бит 0 порта 61h равен единице, то работа канала 2 (счет) разрешается. Если бит 1 порта 61h равен единице, то разрешается подача fвых на динамик. Таким образом, звук будет воспроизводиться, только если оба этих бита установлены в единицу.

Коэффициент пересчета для любой ноты можно определить исходя из выражения:

Кпр=fоп/fноты.

При этом учитываются следующие соотношения:

частота ноты "до" 1-й октавы (fдо) = 32.625 Гц; частота ноты "до" 2-й октавы = 2*fдо; частота ноты "до" 3-й октавы = 4*fдо; и так далее;

частота "до-диез" = а*fдо;

частота "ре" = а*fдо-диез;

и так далее,

где а =1.06 (приблизительно).

Если нам необходимо сыграть на компьютере мелодию, то проще подсчитать коэффициенты всех нот заранее или взять их готовыми (смотри Приложение), так как человечеству эти коэффициенты давно известны. Таким образом, для мелодии желательно подготовить следующие данные:

а) коэффициент пересчета и время звучания для каждой ноты;

б) длительности всех пауз между нотами.

После того как все эти числа известны, надо последовательно выполнять следующие действия:

  1. Запретить звучание, для чего установить в ноль оба младших бита порта 61h (не меняя, при этом, остальные биты этого порта);

  2. Настроить канал 2, выполнив две команды: ; настраиваем канал 2 на передачу двух байт Кпр., на режим 3 и на ; двоичный счет mov al, 0b6h out 43h, al

  3. За две передачи в канал 2 загрузить Кпр для текущей ноты, например: ; загружаем в канал 2 Кпр = 300 mov ax, 300 out 42h, al mov al, ah out 42h, al;

  4. Разрешить звучание, установив в единицу оба младших бита порта 61h;

  5. Ввести задержку, равную длительности ноты;

  6. Запретить звучание;

  7. Выдержать паузу требуемой длительности и перейти к пункту 3.

Стандартно подобная программа пишется примерно следующим образом. Создается массив нот (коэффициентов пересчета), который заканчивается «не нотой», например, нулем. Эта «не нота» задает конец массива (мелодии). Если надо, создаются массивы длительностей нот и пауз между нотами. Программа считывает из массива нот очередной элемент, проигрывает его, считывает очередной элемент и так до тех пор, пока будет считана «не нота». После этого программа заканчивает свою работу. Не забудьте при выходе из программы запретить звучание, иначе компьютер будет продолжать играть последнюю ноту. Достоинство такой программы состоит в том, что для изменения мелодии достаточно изменить числа в массивах.

Примечание: для создания звуковых эффектов при проигрывании какой-либо ноты можно с определенной частотой сбрасывать/устанавливать бит 1 в порту 61h

ЗАДАНИЕ К ЛАБОРАТОРНОЙ РАБОТЕ «Работа со звуком».

В соответствии с музыкальными способностями и вкусом, реализовать на ПЭВМ любую известную мелодию, начиная от гаммы «до – мажор» до «Полонеза» Огинского. Единственным требованием является несовпадение вашей мелодии с мелодиями других бригад из вашего потока.