Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
lab1 / 0303_Болкунов_ВО_ЛР1.doc
Скачиваний:
1
Добавлен:
12.08.2022
Размер:
401.92 Кб
Скачать

Отличия форматов файлов сом и ехе модулей

  1. Какова структура файла COM? С какого адреса располагается код?

- код и данные в одном сегменте (а стек создаётся автоматически с конца сегмента). Код располагается с адреса 0h.

2) Какова структура файла «плохого» EXE? С какого адреса располагается код? Что располагается с адреса 0?

- в «плохом» EXE данные и код содержатся в одном сегменте.

С адреса 0h идёт таблица настроек (Relocation table). Код располагается с адреса 300h.

  1. Какова структура файла «хорошего» EXE? Чем он отличается от файла

«плохого» EXE?

- в «хорошем» .exe файле код, данные и стек находятся в разных сегментах.  Также в «плохом» .exe адресация кода начинается с 300h, так как он получается из .com файла, в котором изначально сегмент кода смещён на 100h, а при создании «плохого» .exe к этому смещению добавляется размер PSP равный 200h. А в «хорошем» .exe присутствует только смещение для PSP, поэтому код начинается с 200h.

Загрузка сом модуля в основную память

1) Какой формат загрузки модуля COM? С какого адреса располагается код?

- .com файл помещается в память, начиная с адреса (внутри сегмента) 0100h. После загрузки .com программы сегментные регистры CS, DS, ES и SS указывают на адрес сегмента программы (в данном случае 543Bh), SP указывает на конец сегмента программы, там находится вершина стека (который растёт вниз – по убыванию адреса). Регистр IP содержит 100H (фактическое начало программы)

2) Что располагается с адреса 0?

- Program Segment Prefix (PSP) размером в 100h байт

3) Какие значения имеют сегментные регистры? На какие области памяти они указывают?

- При загрузке программы они указывают на начало сегмента программы.

  1. Как определяется стек? Какую область памяти он занимает? Какие адреса?

- стек автоматически помещается в конец сегмента и растёт по

убыванию адреса (смещения) относительно сегмента.

Загрузка «хорошего» ехе модуля в основную память

  1. Как загружается «хороший» EXE? Какие значения имеют сегментные регистры?

- регистры CS и SS (отвечающие за сегмент кода и стека), в данном

случае они имеют значения 543Bh и 546Fh соответственно и инициализированы сразу (после загрузки программы), а регистр сегмента данных DS устанавливается уже во время исполнения с помощью последовательности команд :

mov ax, @data

mov ds, ax

Регистр SP содержит указатель на вершину стека 100h (именно такого размера сегмент стека был указан в программе)

  1. На что указывают регистры DS и ES?

- DS и ES – регистр сегмента данных и дополнительный сегментный регистр соответственно, по умолчанию (при загрузки программы) они указывают на сегмент программы (начало PSP).

3) Как определяется стек?

- стек имеет собственный сегмент (указан в регистре SS), его размер указывается командой .stack

4) Как определяется точка входа?

- директива end <имя> определяет точку входа в программу (метка с именем точки должна быть объявлена выше)

Выводы:

В ходе лабораторной работы были исследованы структуры организации загрузочных .com и .exe модулей, написаны исходные коды программ (собранных в эти два типа модулей) выводящих информацию о типе компьютера и версии ОС (для DOS). Также было исследована загрузка этих типов загрузочных модулей в оперативную память с помощью отладчика.

13

Соседние файлы в папке lab1