Описание резидентной части программы. 3 Справочное описание используемых в программе системных обработчиков, сервисных функций dos и bios. 3 Листинг 6



Дата08.10.2012
Размер76.4 Kb.
ТипКурсовая


Содержание.


Задание 2

Структурное описание алгоритма 2

Описание резидентной части программы. 3

Справочное описание используемых в программе системных обработчиков, сервисных функций DOS и BIOS. 3

Листинг 6



Задание


Резидент, выводящий на экран квадрат типа красной дыры. Программа перехватывает прерывание int 1Ch и постоянно подменяет атрибуты символов внутри квадрата. Программа действует только в режиме экрана 3, поэтому вначале проверяется режим экрана. Вывод на экран (подмена атрибутов) реализуется путём непосредственного программирования памяти. Предусмотреть дрейф дыры по экрану в какую-либо сторону с восстановлением прежних атрибутов.

^

Структурное описание алгоритма


Курсовая работа представляет собой один com-файл, содержащий резидентную часть программы. Программа переопределяет следующие обработчики прерываний: 08h, 09h, 28h, 2Fh, 1Ch, а также содержит процедуру task.

В процедуре task происходит проверка режима экрана и реализация вывода квадрата типа красной дыры. Квадрат при дрейфе по экрану не оставляет за собой шлейфа, так как происходит восстановление прежних атрибутов символов занятых дырой. Для этого перед выводом дыры в новом месте происходит сохранение старых атрибутов. Выход из процедуры осуществляется по нажатию любой из клавиш клавиатуры.

В случае если режим экрана не третий процедура сразу прекращает своё выполнение.

Программы построена таким образом, что возможен запуск процедуры task как с клавиатуры, так и программно по истечению определённого времени, отсчитываемого от последнего нажатия любой клавиши клавиатуры. В случае запуска данной процедуры её повторный запуск невозможен. Для этого в программу введено несколько флагов: task_request -флаг требования запуска процедуры task, task_work - признак запущенной процедуры task.

Обработчик прерывания new_1Ch служит для отсчёта времени отсутствия нажатий на клавиши клавиатуры, для подмены атрибутов символов в окне красной дыры. При достижении определённого времени бездействия клавиатуры происходит установка флага требования запуска процедуры task и признака запущенной процедуры task в 1.

Прикладной обработчик клавиатуры new_09h, устанавливает флаг требования обработки процедуры task и признак запущенной процедуры task в 1 в случаи нажатия комбинации клавиш Alt-A. При нажатий любых других клавиш происходит сброс переменной task_wait и переход в системный обработчик без возврата.

Программы построена с учётом свойств нереентерабельности DOS. Для этого введены обработчики new_08h и new_28h. Прикладной обработчик таймера new_08h служит для активизации процедуры task.
Он 18,2 раза в секунду проверяет состояние флагов требования на обработку task_request и флагов занятости DOS. Обработчик прерывания new_28h является активизатором процедуры task во время исполнения функций DOS ввода с клавиатуры. Данный обработчик может инициировать процедуру с использованием функций DOS дисковой группы. Файловая функция вывода 40h будет использоваться с нестандартными дескрипторами клавиатуры

Итак при взведённом флаге требования на обработку task_request (функция аппаратного обработчика 09h, активизируемого клавишной комбинацией Alt-A или функция аппаратного обработчика 1Сh, активизируемого по истечению некоторого времени) исполнение процедуры task по выводу красной дыры на экран монитора с последующим дрейфом осуществляется:

  • прикладным обработчиком new_28h, когда компьютер не занят исполнением никакой программы и управление передано командному процессору Command.com.

  • прикладным обработчиком таймера new_08h – во время исполнения какой-либо задачи, использующей функции вывода DOS.

  • Прикладным обработчиком new_28h – во время ожидания системой ввода символов в командную строку.

^ Описание работы программы.

Резидент запускается из командной строки (файл с расширением .com). После проверки на присутствие в памяти первого экземпляра программы, выдается соответствующее сообщение об установке резидента или невозможности его повторной установки. При успешной инсталляции резидента, он будет находиться в «спящем режиме до тех пор, пока не пройдёт определенное в программе количество времени или пользователь не нажмёт комбинацию из клавиш Alt+A. После этих процедур на экране монитора появляется красный квадрат, который движется влево и вправо, при этом подменяя атрибуты находящихся в его области символов на атрибут для отображения красным цветом. Таким образом, в области красного квадрата символы не будут отображаться. Когда красный квадрат перемещается с определённого места, то на месте старого его положения происходит восстановление прежних атрибутов символов. Если пользователь в командной строке вызывает резидент с функцией Off, то произойдёт проверка на наличие резидента в памяти и, если резидент установлен, происходит его удаление из памяти с выводом соответствующего сообщения, в противном случае выводится сообщение об отсутствии резидента в памяти.
^

Описание резидентной части программы.


В секции инициализации выполняется проверка на наличие в памяти первого экземпляра резидента. Если первый экземпляр не обнаружен, то независимо от вида запускающей программу команды (с хвостом или без него) происходит переход на метку ОК с установкой программы в памяти. При обнаружении первого экземпляра программы начинается сравнение хвоста программы с ожидаемым. Если результат сравнения оказался отрицательным, (хвост есть, но другой), программа завершается выводом сообщения о невозможности повторной установки. При идентичности хвоста ожидаемому, резидент выгружается из памяти с выводом соответствующего сообщения. Запуск
^

Справочное описание используемых в программе системных обработчиков, сервисных функций DOS и BIOS.


При помощи инструментального обработчика new_2Fh происходит внутренняя привязка к перехваченному вектору, т.е. данный обработчик реализует функциию проверки наличия в памяти первого экземпляра резидента.

Анализ структуры команды запуска производится в секции инициализации программы. Прежде всего, с помощью функции AX=0C800h прерывания 2Fh выполняется проверка на наличие в памяти первой копии программы. Если она не обнаружена, то независимо от типа запускающей команды (с опцией или нет) происходит переход на метку ОК и установка программы в памяти. В противном случае начинается анализ хвоста команды. Байт с длиной хвоста, находящийся по адресу ES:80h, помещается в регистр CL и сравнивается с нулём. Если в нём 0, команда была без хвоста. В этом случае выводится сообщение о невозможности вторичной установки, и инициализация завершается вызовом функции 4Ch (выход в DOS). Если хвост имеет ненулевую длину, то его длина фиксируется в регистре CX для последующей организации цикла. C помощью строковой команды scasb определяется адрес первого символа хвоста, отличного от нулевого. Далее командой сравнения строк cmpsb осуществляется сравнение трёх оставшихся символов хвоста с опцией ‘off'. Если результат сравнения оказался отрицательным, выполняется переход на завершение программы с предварительным выводом сообщения о невозможности повторной установки. Если введённая команда содержала опцию ‘off’, - в первую копию резидента посылается приказ на выгрузку: прерывание 2Fh с кодом AL=01h. По завершению выгрузки программы из памяти (команда iret процедуры new_2Fh), секция инициализации завершается выводом соответствующего сообщения последующим вызовом функции 4Ch.

^ Int 2Fh: мультиплексное прерывание.

Ввод: AH = функция прерывания или идентификатор программы (от 00h доFFh),

00h – 7Fh зарезервировано для DOS/Windows

B8h – BFh зарезервировано для сетевых функций,

C0h – FFh отводится для использования в прикладных программах,

AL = подфункция с кодом 00h – проверка наличия программы в памяти, остальные коды – свои для каждой функции,

^ BX, CX ,DX=00h (если через эти регистры происходит возврат заранее обусловленных кодов)

Возврат: если при вызове прерывания Int 2Fh из инициализационной части резидентной программы (AH –принятый идентификатор программы, а AL=00h), происходит возврат в регистре AL значения FFh, то обработчиком обнаружено в памяти установленная ранее копия программы с “нашим” идентификатором. Возврат же с AL=00h – её отсутствие

В системе может быть установлено несколько программ, использующих мультиплексное прерывание 2Fh, поэтому, если обработчик обнаружил в регистре AH “чужую” функцию, то он должен командой

Jmp [dword cs:old_2Fh]

передать управление по цепочке тому обработчику, адрес которого был ранее в векторе 2Fh. В результате вызов int 2Fh из любой программы будет проходить по цепочке через все загруженные резидентные программы, пока не достигнет “своей” (AL=FFh), или при её отсутствии, вернёт управление в вызвавшую программу (инициализационную часть) c AL=00h.

В программе использованы группы функций int 21h (06h,…):

  • 06h – ввод одиночных символов из стандартного устройства ввода и вывод одиночных символов на стандартное устройства вывода.

4Сh- Функция DOS-выход из программы.

  • 49h- Функция освобождения блока памяти Освобождает блок памяти и передаёт его системе.

Вызов: AH=49h,

ES= сегментный адрес освобождаемого блока.

  • 35h. Получение вектора прерывания.

Вызов: AH=35h, AL = номер вектора прерывания.

Возврат: ES:BX = двухсловный адрес (Seg:Offset) обработчика прерываний.

  • 25h. Установка вектора прерывания.

Позволяет заполнить вектор прерывания адресом обработчика прерываний.

Вызов: AH=25h, AL = номер вектора прерывания.

Возврат: DS:BX = двухсловный адрес обработчика прерываний.

Конкретное использование указанных системных средств показано в программе prg1.

  • функция DOS 31h, которая может использоваться как для Com –, так и exe- программ, оставляет программу резидентной в памяти.


^ Int 1Аh, функция 00h. Чтение счетчика циклов таймера.

Обработчик прерывания BIOS от системного таймера (Int 8) подсчитывает количество прерываний (каждые 55 мсек или 18,2 раза в секунду) в двойном слове памяти с адресом 0040h:006Сh. Данная функция возвращает накопленное значение (двоичный код) и сбрасывает его в 0. В регистре AL возвращается 0, если содержимое счетчика не превысило значения, соответствующего 24 часам (при достижении этого значения счетчик сбрасывается), иначе возвращается AL=1.

Вызов: АН = 00h.

Возврат: СХ:DX – число тактов системного времени от полуночи,

AL – флаг перехода через сутки.
Int 10h, Функция 0Fh. Получить режим дисплея и номер текущей страницы.

Вызов: AH = 0Fh.

Возврат: AL = режим дисплея, AH = ширина экрана в текстовом формате

BH =номер активной страницы.

Вызов разрушает регистры BP, SI и DI.

Листинг



Похожие:

Описание резидентной части программы. 3 Справочное описание используемых в программе системных обработчиков, сервисных функций dos и bios. 3 Листинг 6 iconПрограммирование драйвера клавиатуры
Примечание. Разработанные программы не должны содержать системных вызовов ms-dos и bios, выполняющих информационный обмен с клавиатурой...
Описание резидентной части программы. 3 Справочное описание используемых в программе системных обработчиков, сервисных функций dos и bios. 3 Листинг 6 iconМ. А. Мунтян политические системы
В середине XX века в результате активного использования применявшихся в биологии системных (Л. Берталанфи) и кибернетических (Н....
Описание резидентной части программы. 3 Справочное описание используемых в программе системных обработчиков, сервисных функций dos и bios. 3 Листинг 6 iconЛекция 02 Прямой ввод-вывод: организация и функции Вывод на дисплей. Часть 1
«Среднеуровневый» ввод-вывод возможен только на консоль, работающую в «текстовом режиме», с помощью «базовых» прерываний ms-dos и...
Описание резидентной части программы. 3 Справочное описание используемых в программе системных обработчиков, сервисных функций dos и bios. 3 Листинг 6 iconОписание входных данных в формате Excel для программы подготовки декларации
...
Описание резидентной части программы. 3 Справочное описание используемых в программе системных обработчиков, сервисных функций dos и bios. 3 Листинг 6 iconРекомендации по использованию икт в программе профессиональной подготовки учителя английского языка
Краткое описание образовательной программы среднего профессионального образования специальности «050303- иностранный язык»
Описание резидентной части программы. 3 Справочное описание используемых в программе системных обработчиков, сервисных функций dos и bios. 3 Листинг 6 iconWindows Internet Explorer 8 Описание продукта Март 2009 г
Кроме того, новые функциональные возможности Internet Explorer 8 предлагают более быстрые, простые и безопасные способы навигации...
Описание резидентной части программы. 3 Справочное описание используемых в программе системных обработчиков, сервисных функций dos и bios. 3 Листинг 6 iconРуководство по комплектам «mmpi 0» и«wais 0». Описание комплекта
Описание комплекта «mmpi 0» Представленный комплект является базисным инструментом профессиональной компьютерной психодиагностики...
Описание резидентной части программы. 3 Справочное описание используемых в программе системных обработчиков, сервисных функций dos и bios. 3 Листинг 6 iconКраткое описание модулей библиотеки
Библиотека "k-lib" содержит 3324 функции в 61 модуле. Названия модулей и функций соответствуют принятым в языке C++ стандартам. Функциональность...
Описание резидентной части программы. 3 Справочное описание используемых в программе системных обработчиков, сервисных функций dos и bios. 3 Листинг 6 iconAnsys описание пакета Вы здесь : Программы ansys описание пакета
Открытость – возможна любая модификация и программирование на любом уровне пакета (см далее)
Описание резидентной части программы. 3 Справочное описание используемых в программе системных обработчиков, сервисных функций dos и bios. 3 Листинг 6 iconУкраина, Крым Отдых на Черноморском побережье Пансионат с лечением «Планета» г. Евпатория Описание
Описание: расположен в курортной части г. Евпатория, рядом со знаменитым озером Мойнаки. На территории пансионата расположены две...
Разместите кнопку на своём сайте:
ru.convdocs.org


База данных защищена авторским правом ©ru.convdocs.org 2016
обратиться к администрации
ru.convdocs.org