Исследование интерфейсов программных модулей

Автор работы: Пользователь скрыл имя, 02 Мая 2013 в 19:32, лабораторная работа

Описание работы

Цель работы: Исследование интерфейса управляющей программы и загрузочных модулей. Этот интерфейс состоит в передаче запускаемой программе управляющего блока, содержащего адреса и системные данные. Так загрузчик строит префикс сегмента программы (PSP) и помещает его адрес в сегментный регистр. Исследование префикса сегмента программы (PSP) и среды, передаваемой программе.

Файлы: 1 файл

Lab2.doc

— 135.00 Кб (Скачать файл)

Санкт-Петербургский государственный  электротехнический университет

“ЛЭТИ”

 

                                                                                                            кафедра МОЭВМ

 

 

 

 

 

 

 

 

      

ОТЧЕТ по

лабораторной  работе №2 
«Исследование интерфейсов программных модулей»

 

 

 

 

 

 

 

 

 

 

Выполнила :Кузьминская А.С.

 

                       Факультет:        КТИ

 

                    Группа:        0303

 

     Преподаватель :    Губкин А.Ф. 

 

                                                                                              Дата:  01.12.12                          

                                                                                                                     

 

 

Санкт-Петербург

2012

 

Цель  работы:

Исследование  интерфейса управляющей программы и загрузочных модулей. Этот интерфейс состоит в передаче запускаемой программе управляющего блока, содержащего адреса и системные данные. Так загрузчик строит префикс сегмента программы (PSP) и помещает его адрес в сегментный регистр. Исследование префикса сегмента программы (PSP) и среды, передаваемой программе.

 

Постановка задачи:

Необходимо оформить программу в виде загрузочного модуля типа .COM.

Ассемблерная программа  выбирает и распечатывает следующую  информацию:

  1. Сегментный адрес недоступной памяти, взятый из PSP, в шестнадцатеричном виде.
  2. Сегментный адрес среды, передаваемой программе, в шестнадцатеричном виде.
  3. Хвост командной строки в символьном виде.
  4. Содержимое области среды в символьном виде.
  5. Путь загружаемого модуля.

Затем нужно  изменить программу таким образом, чтобы сразу после получения  управления она освобождала память, которую она не занимает. Для этого  используется функцию 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.Сегментный адрес недоступной памяти

      1) На какую область памяти указывает адрес недоступной памяти?

Адрес недоступной памяти указывает на значение сегментного  адреса первого байта за памятью, отведенной программе.

 

        2)Где расположен этот адрес по отношению области памяти, отведенной программе?

Сразу за памятью, отведенной программе.

 

      3) Можно ли в эту область памяти писать?

Можно, используя данный код:

mov  AX, ES:[0002h]

mov  ES, AX

mov  ES:[0000Fh], WORD PTR 0Fh

2. Среда передаваемая программе

     1) Что такое среда?

 Среда– это совокупность значений системных переменных, путей, открытых файловых дескрипторов и других ресурсов операционной системы, передаваемые программе при её запуске.

 

     2) Когда создается среда? Перед запуском приложения или в другое время?

При загрузке программы содержимое начального окружения копируется в создаваемое окружение программы. Сегментный адрес заносится в PSP со смещения 2Сh от начала.

 

     3) Откуда берется информация, записываемая в среду?

Из системного файла autoexec.bat (для MS DOS) при запуске ОС


Информация о работе Исследование интерфейсов программных модулей