Ассемблер и программирование для IBM PC



       

ГЛАВА 22. Программный загрузчик - часть 7


Ассемблер для IBM PC. Глава 22 39

OE Относительный адрес сегмента стека в выполняемом модуле. 10 Адрес, который загрузчик должен поместить в регистр SP перед передачей управления в выполнимый модуль. 12 Контрольная сумма - сумма всех слов в файле (без учета переполнений) используется для проверки потери данных. 14 Относительный адрес, который загрузчик должен поместить в регистр IP до передачи управления в выполняемый модуль. 16 Относительный адрес кодового сегмента в выполняемом модуле. Этот адрес загрузчик заносит в регистр CS. 18 Смещение первого настраиваемого элемента в файле. 1A Номер оверлейного фрагмента: нуль обозначает, что заго ловок относится к резидентной части EXE-файла. 1C Таблица настройки, содержащая переменное число настраиваемых элементов, соответствующее значению по смещению 06.

Заголовок имеет минимальный размер 512 байтов и может быть больше, если программа содержит большое число настраи ваемых элементов. Позиция 06 в заголовке указывает число элементов в выполняемом модуле, нуждающихся в настройке. Каждый элемент настройки в таблице, начинающейся в позиции 1C заголовка, состоит из двухбайтовых величин смещений и двухбайтовых сегментных значений. Система строит префикс программного сегмента следом за резидентной часью COMMAND.COM, которая выполняет операцию загрузки. Затем COMMAND.COM выполняет следующие действия:

ъ Считывает форматированную часть заголовка в память. ъ Вычисляет размер выполнимого модуля (общий размер файла в позиции 04 минус размер заголовка в позиции 08) и загружает модуль в память с начала сегмента. ъ Считывает элементы таблицы настройки в рабочую область и прибавляет значения каждого элемента таблицы к началу сегмента (позиция OE). ъ Устанавливает в регистрах SS и SP значения из заголовка и прибавляет адрес начала сегмента. ъ Устанавливает в регистрах DS и ES сегментный адрес префикса программного сегмента. ъ Устанавливает в регистре CS адрес PSP и прибавляет вели чину смещения в заголовке (позиция 16) к регистру CS. Если сегмент кода непосредственно следует за PSP, то смещение в заголовке равно 256 (шест.100). Регистровая пара CS:IP содержит стартовый адрес в кодовом сегменте, т.е. начальный адрес программы.




Содержание  Назад  Вперед