Автор работы: Пользователь скрыл имя, 02 Мая 2013 в 19:32, лабораторная работа
Цель работы: Исследование интерфейса управляющей программы и загрузочных модулей. Этот интерфейс состоит в передаче запускаемой программе управляющего блока, содержащего адреса и системные данные. Так загрузчик строит префикс сегмента программы (PSP) и помещает его адрес в сегментный регистр. Исследование префикса сегмента программы (PSP) и среды, передаваемой программе.
Санкт-Петербургский
“ЛЭТИ”
ОТЧЕТ по
лабораторной
работе №2
«Исследование интерфейсов программных
модулей»
Выполнила :Кузьминская А.С.
Факультет: КТИ
Группа: 0303
Преподаватель : Губкин А.Ф.
Санкт-Петербург
2012
Цель работы:
Исследование интерфейса управляющей программы и загрузочных модулей. Этот интерфейс состоит в передаче запускаемой программе управляющего блока, содержащего адреса и системные данные. Так загрузчик строит префикс сегмента программы (PSP) и помещает его адрес в сегментный регистр. Исследование префикса сегмента программы (PSP) и среды, передаваемой программе.
Постановка задачи:
Необходимо оформить программу в виде загрузочного модуля типа .COM.
Ассемблерная программа выбирает и распечатывает следующую информацию:
Затем нужно изменить программу таким образом, чтобы сразу после получения управления она освобождала память, которую она не занимает. Для этого используется функцию 4Аh прерывания 21h.
Общие сведения:
При начальной загрузке программы формируется PSP, который размещается в начале первого сегмента программы. PSP занимает 256 байт и располагается с адреса, кратного границе сегмента. При загрузке модулей типа .COM все сегментные регистры указывают на адрес PSP. При загрузке модуля типа .EXE сегментные регистры DS и ES указывают на PSP. Именно по этой причине значения этих регистров в модуле .EXE следует переопределять.
Формат PSP:
Смещение |
Длина поля(байт) |
Содержимое поля |
0 |
2 |
int 20h |
2 |
2 |
Сегментный адрес первого байта недоступной памяти. Программа не должна модифицировать содержимое памяти за этим адресом. |
4 |
6 |
Зарезервировано |
0Ah (10) |
4 |
Вектор прерывания 22h (IP,CS) |
0Eh (14) |
4 |
Вектор прерывания 23h (IP,CS) |
12h (18) |
4 |
Вектор прерывания 24h (IP,CS) |
2Ch (44) |
2 |
Сегментный адрес среды, передаваемой программе. |
5Ch |
Область форматируется как стандартный неоткрытый блок управления файлом (FCB) | |
6Ch |
Область форматируется как стандартный неоткрытый блок управления файлом (FCB). Перекрывается, если FCB с адреса 5Ch открыт. | |
80h |
1 |
Число символов в хвосте командной строки. |
81h |
Хвост командной строки - последовательность символов после имени вызываемого модуля. |
Область среды содержит
последовательность символьных строк
вида:
Каждая строка завершается байтом нулей.
В первой строке указывается имя COMSPEC, которая определяет используемый командный процессор и путь к COMMAND.COM. Следующие строки содержат информацию, задаваемую командами PATH, PROMPT, SET.
Среда заканчивается также байтом нулей. Таким образом, два нулевых байта являются признаком конца переменных среды. Затем идут два байта, содержащих 00h, 01h, после которых располагается маршрут загруженной программы. Маршрут также заканчивается байтом 00h.
Описание программы:
В программе использованы следующие макросы и процедуры:
WR_GREETING |
Вывод строки с привестсвием |
TETR_TO_HEX |
Вспомогательная для byte_to_hex процедура |
WR_EXIT |
Вывод строки с информацией для выхода |
BYTE_TO_HEX |
Конвертация байта в неупакованный 16чный формат |
WRD_TO_HEX |
Конвертация слова в неупакованный 16чный формат |
BYTE_TO_DEC |
Конвертация байта в неупакованный 10чный формат |
INACS_MEM_ADDR |
Вывод сегментного адреса недоступной памяти |
ENV_ADDR |
Вывод сегментного адреса среды |
CMD_TAIL_PR |
Вывод хвоста командной стоки |
ENV_CONTENT |
Вывод содержимого области среды |
LOAD_MODULE_PATH |
Вывод пути загружаемого модуля |
Тестирование программы:
При вызове программы
выводится следующая
Информация, выводимая после вставки кода освобождения памяти:
Вывод:
В ходе выполнения данной лабораторной работы была написана и протестирована программа в виде COM-модуля. Программа выводит на экран сегментный адрес недоступной памяти, взятый из PSP, в шестнадцатеричном виде, сегментный адрес среды, передаваемой программе, в шестнадцатеричном виде, хвост командной строки в символьном виде и путь загружаемого модуля.
Контрольные вопросы:
1) На какую область памяти указывает адрес недоступной памяти?
Адрес недоступной памяти указывает на значение сегментного адреса первого байта за памятью, отведенной программе.
2)Где расположен этот адрес по отношению области памяти, отведенной программе?
Сразу за памятью, отведенной программе.
3) Можно ли в эту область памяти писать?
Можно, используя данный код:
mov AX, ES:[0002h]
mov ES, AX
mov ES:[0000Fh], WORD PTR 0Fh
1) Что такое среда?
Среда– это совокупность значений системных переменных, путей, открытых файловых дескрипторов и других ресурсов операционной системы, передаваемые программе при её запуске.
2) Когда создается среда? Перед запуском приложения или в другое время?
При загрузке программы содержимое начального окружения копируется в создаваемое окружение программы. Сегментный адрес заносится в PSP со смещения 2Сh от начала.
3) Откуда берется информация, записываемая в среду?
Из системного файла autoexec.bat (для MS DOS) при запуске ОС
Информация о работе Исследование интерфейсов программных модулей