ТО_Тим (1071489)
Текст из файла
Московский Государственный Технический Университет им. Н. Э. Баумана
Утверждаю:
Большаков С. А. « » 2002г.
Курсовая работа по системному программированию
«Резидентный загрузчик»
Техническое описание
(вид документа)
писчая бумага
(вид носителя)
7
(количество листов)
Исполнитель:
студент группы ИУ5-51
Хамидов Т.Ф. « » 2002г.
Москва - 2002
-
Общие сведения о программном обеспечении.
-
Средства разработки
При разработке программы были использованы TASM 5.0,TLINK 7.1.30.1,TD 3.1.
-
Размеры исходных файлов
Резидентный модуль (loader.asm) – 17954 байта
-
Размеры и типы программных модулей
Модуль-резидент (собственно программа – loader.com) – 4004 байта
-
Модульная структура программного обеспечения
Программный комплекс выполнен в виде единственного программного модуля (loader.com).
Вышеуказанный программный модуль в свою очередь образуется путем компоновки исходного модуля: loader.asm.
-
Описание модулей программного обеспечения
Модуль loader.asm
Этот модуль включает в себя обработчики прерываний 09h, 2Dh, а также данные, необходимые для работы резидентной части программы (флаги состояния программы, буфера для хранения данных). Также данный модуль содержит инсталляционную часть, которая предназначена для корректной (по стандарту AMIS) загрузки резидента в ОП, а также для корректной выгрузки резидента из ОП. Условно этот модуль можно разделить на части разбора командной строки, обнаружения резидента в памяти, инсталляции, перехват векторов прерываний, освобождения ОП из под окружения DOS, выгрузки резидента из ОП. Модуль так же содержит сообщения, выводимые на экран в процессе его работы.
-
Данные и файлы данных программного обеспечения
Резидентный модуль loader.asm
Наименование | Тип | Возможные значения | Инициализация |
msg_er1 | массив из 47-и байт | для каждого элемента массива [00h : FFh] | cr,lf,'IO operation failed while workexe1' |
msg_er2 | массив из 47-и байт | --- | cr,lf,'IO operation failed while workexe2' |
msg_unld | массив из 45-ти байт | --- | cr,lf,'The program has been successfully unloaded!' |
msg_unld_err | массив из 38-ти байт | --- | cr,lf,'The program can not be unloaded now!' |
amis _sign | массив из 16-ти байт | --- | db ‘TSR_EXE_’ db ‘_LOADER_’ |
amis_hooklist | массив из 6-ти байт | --- | db 09h dw offset int09h_handler db 2Dh dw offset int2Dh_handler |
EPB | массив из 11 слов | для каждого элемента массива [00h : FFFFh] | dw 0 dw OFFSET CMD dw 0 dw OFFSET FCB1 dw 0 dw OFFSET FCB2 dw 0 dw OFFSET Rest dw 0 dw OFFSET Rest dw 0 |
CMD | массив из 2-х байт | для каждого элемента массива [00h : FFh] | 0,13 |
FCB1 | массив из 16-ти байт | --- | 16 DUP (0) |
FCB2 | массив из 16-ти байт | --- | 16 DUP (0) |
Exe1Prog | массив из 9-ти байт | --- | 'EXE1.EXE',0 |
Exe2Prog | массив из 9-ти байт | --- | 'EXE2.EXE',0 |
Handle | слово | [00h : FFFFh] | 0 |
Header | массив из 32-ти байт | для каждого элемента массива [00h : FFh] | 32 DUP(0) |
is_app_working | байт | [00h : FFh] | 0 |
app_ss | слово | [00h : FFFFh] | ? |
app_sp | слово | [00h : FFFFh] | ? |
pr_stack | массив из 240h-ти слов | для каждого элемента массива [00h : FFFFh] | 240h dup (?) |
msg_abt | массив из 106-и байт | для каждого элемента массива [00h : FFh] | db 'Exe loader', cr,lf db 'Loads 2 predefined executeable files', cr, lf db '$' |
msg_lod | массив из 32-х байт | --- | db 'Error: program already loaded', cr, lf db '$' |
msg_mux | массив из 29-и байт | --- | db 'Error: too many tsr loaded', cr, lf db '$' |
msg_ins | массив из 45-и байт | --- | db 'Program was sucsessfully loaded in memory', cr, lf db '$' |
-
Основные алгоритмы программного обеспечения
-
Обработчики прерываний
-
Обработчик прерывания 09h
-
Дать отработать старому обработчику
-
Буфер клавиатуры пуст?
если да – выйти из обработчика
если нет – перейти к следующему пункту
-
Нажали клавишу Z?
если нет – перейти к пункту 4
если да – перейти к пункту 7
-
Нажали клавишу X?
если нет – перейти к пункту 5
если да – перейти к пункту 11
-
Набрали loader /u, /U?
если нет – выйти из обработчика
если да – перейти к пункту 15
-
Нажали клавишу С?
если нет – выйти из обработчика
если да – перейти к пункту 22
-
Очистить буфер клавиатуры
-
Изменить состояние программы на «занято»
-
Изменить флаг цели на файл EXE1.EXE
-
Выйти из обработчика
-
Очистить буфер клавиатуры
-
Изменить состояние программы на «занято»
-
Изменить флаг цели на файл EXE1.EXE
-
Выйти из обработчика
-
Проверить сегментные адреса. Выгрузка возможна?
если да – перейти к следующему пункту
если нет – перейти к пункту 21
-
Восстановить сохраненные обработчики прерываний
-
Показать сообщение об успешной выгрузке и выгрузить резидентную часть из памяти.
-
Показать сообщение о невозможности выгрузки и выйти из обработчика
-
Выйти из обработчика
-
Сбросить все флаги занятости и прервать все процессы загрузки.
-
Выйти из обработчика
-
Обработчик прерывания 28h
-
ODSO реентерабелен?
Если да – то перейти к следующему пункту.
Если нет – выйти из обработчика
-
Активация требуется?
Если да – то перейти к следующему пункту.
Если нет – выйти из обработчика
-
Активация возможна?
Если да – перейти к пункту к следующему пункту.
Если нет – выйти из обработчика.
-
Переключить стек и все сегментные регистры
-
В зависимости от флага файла загрузить один из двух предопределенных файлов в память.
-
Считать с диска заголовок загруженного файла, настроить в память адреса переходов и сегментных регистров, передать управление загруженному файлу, указав адрес возврата в пункт 7.
-
Сбросить флаги необходимости и возможности работы.
-
Восстановить состояние стека и сегментных регистров.
-
Выйти из обработчика.
-
Обработчик прерывания 2Dh
-
Вызвали?
Если да – то перейти к следующему пункту.
Если нет – передать управление дальше по цепочке обработчиков AMIS.
-
Номер функции больше 1.
Если да – перейти к пункту 04.
Если нет – перейти к следующему пункту.
-
В зависимости от переданного кода функции совершить переход на нужный пункт.
Функция 00 (проверка наличия) – пункт 06.
Функция 01 (не поддерживается) – пункт 04.
-
Установить код возврата равным нулю (неподдерживаемая функция).
-
Возврат из прерывания.
-
Установить код возврата равным FFh, что означает занятость идентификатора. Вернуть дальний адрес сигнатуры и версию программы.
-
Возврат из прерывания.
-
Установка резидента
-
Установить идентификатор равным FFh.
-
Вызвать AMIS с проверкой наличия.
-
Идентификатор занят?
Если да – перейти к следующему пункту.
Если нет – прейти к пункту 5.
-
Сравнить сигнатуры.
Если равны – перейти к пункту 20.
Если нет – переход к пункту 6.
-
Сохранить идентификатор в резидентной части программы.
-
Уменьшить идентификатор на 1.
-
Перейти к пункту 2, если идентификатор больше нуля, иначе – к следующему пункту.
-
Мы ничего не записали?
Если да – переход к следующему пункту.
Если нет – переход к пункту 11.
-
Выдача сообщения о переполнении ОП.
-
Выход из программы.
-
Освободить ОП из под окружения DOS.
-
Перехватить вектора прерываний, предварительно сохранив в резидентной части программы их старые значения.
-
Выдача сообщения о загруженности программы в память.
-
Остаться резидентом.
-
Процедуры и функции программного обеспечения
-
Обработчик 09h
Входные данные | Модифицируемые не сохраняемые данные | Выходные данные |
аппаратное прерывание от клавиатуры | is_haveto_work, which_app, буфер клавиатуры | нет |
-
Обработчик 28h
Входные данные | Модифицируемые не сохраняемые данные | Выходные данные |
программное прерывание | EPB, FCB1, FCB2, Handle, Header, app_ss, app_sp, pr_stack, is_app_working, is_haveto_work | нет |
-
Обработчик 2Dh
Входные данные | Модифицируемые не сохраняемые данные | Выходные данные |
программное прерывание | DI и зависит от вызванной функции (см. ниже) | зависит от вызванной функции |
6.3.1. Функция 00h
Входные данные | Модифицируемые не сохраняемые данные | Выходные данные |
al = 00 | dx, di, cx | al = 0FFh, cx = 0100h, dx = сегментный адрес программы, di = смещение amis_sign |
Возвращает версию программы и ее AMIS-сигнатуру
6.3.3. Неподдерживаемая функция
Входные данные | Модифицируемые не сохраняемые данные | Выходные данные |
al > 02 || al == 01 | Нет | al = 0 |
-
Установочная часть
Входные данные | Модифицируемые не сохраняемые данные | Выходные данные |
нет | es,ax,bx,cx,dx,di,si,bp регистр флагов. | нет |
-
Вектора прерываний, переопределяемые в программе
В программе переопределяются вектора прерываний 09h, 28h, 2Dh.
-
Листы конструкторской документации
Модульная структура, взаимодействие и блок-схемы описываемых алгоритмов программы приведены в листах конструкторской документации.
Характеристики
Тип файла документ
Документы такого типа открываются такими программами, как Microsoft Office Word на компьютерах Windows, Apple Pages на компьютерах Mac, Open Office - бесплатная альтернатива на различных платформах, в том числе Linux. Наиболее простым и современным решением будут Google документы, так как открываются онлайн без скачивания прямо в браузере на любой платформе. Существуют российские качественные аналоги, например от Яндекса.
Будьте внимательны на мобильных устройствах, так как там используются упрощённый функционал даже в официальном приложении от Microsoft, поэтому для просмотра скачивайте PDF-версию. А если нужно редактировать файл, то используйте оригинальный файл.
Файлы такого типа обычно разбиты на страницы, а текст может быть форматированным (жирный, курсив, выбор шрифта, таблицы и т.п.), а также в него можно добавлять изображения. Формат идеально подходит для рефератов, докладов и РПЗ курсовых проектов, которые необходимо распечатать. Кстати перед печатью также сохраняйте файл в PDF, так как принтер может начудить со шрифтами.