Полезное:
Как сделать разговор полезным и приятным
Как сделать объемную звезду своими руками
Как сделать то, что делать не хочется?
Как сделать погремушку
Как сделать так чтобы женщины сами знакомились с вами
Как сделать идею коммерческой
Как сделать хорошую растяжку ног?
Как сделать наш разум здоровым?
Как сделать, чтобы люди обманывали меньше
Вопрос 4. Как сделать так, чтобы вас уважали и ценили?
Как сделать лучше себе и другим людям
Как сделать свидание интересным?
Категории:
АрхитектураАстрономияБиологияГеографияГеологияИнформатикаИскусствоИсторияКулинарияКультураМаркетингМатематикаМедицинаМенеджментОхрана трудаПравоПроизводствоПсихологияРелигияСоциологияСпортТехникаФизикаФилософияХимияЭкологияЭкономикаЭлектроника
|
Выполнение EXE-программы
EXE-модуль, созданный компоновщиком, состоит из следующих двух частей: 1) заголовок — запись, содержащая информацию по управлению и настройке программы и 2) собственно загрузочный модуль. В заголовке находится информация о размере выполняемого модуля, области загрузки в памяти, адресе стека и относительных смещениях, которые должны заполнить машинные адреса в соответствии с относительными шест.позициями: Шест.4D5A Компоновщик устанавливает этот код для идентификации правильного EXE-файла. Число байтов в последнем блоке EXE-файла. Число 512 байтовых блоков EXE-файла, включая заголовок. Число настраиваемых элементов. Число 16-байтовых блоков (параграфов) в заголовке, (необходимо для локализации начала выполняемого модуля, следующего после заголовка). A Минимальное число параграфов, которые должны находится после загруженной программы. C Переключатель загрузки в младшие или старшие адреса. При компоновке программист должен решить, должна ли его программа загружаться для выполнения в младшие адреса памяти или в старшие Обычным является загрузка в младшие адреса. Значение шест.0000 указывает на загрузку в старшие адреса, а шест.FFFF — в младшие. Иные значения определяют максимальное число параграфов, которые должны находиться после загруженной программы. E Относительный адрес сегмента стека в выполняемом модуле. Адрес,который загрузчик должен поместить в регистр SP перед передачей управления в выполнимый модуль.
Контрольная сумма — сумма всех слов в файле (без учета переполнений) используется для проверки потери данных. Относительный адрес, который загрузчик должен поместить в регистр IP до передачи управления в выполняемый модуль. Относительный адрес кодового сегмента в выполняемом модуле. Этот адрес загрузчик заносит в регистр CS. Смещение первого настраиваемого элемента в файле. A Номер оверлейного фрагмента: нуль обозначает, что заголовок относится к резидентной части EXE-файла. C Таблица настройки, содержащая переменное число настраиваемых элементов, соответствующее значению по смещению 06. Заголовок имеет минимальный размер 512 байтов и может быть больше, если программа содержит большое число настраиваемых элементов. Позиция 06 в заголовке указывает число элементов в выполняемом модуле, нуждающихся в настройке. Каждый элемент настройки в таблице, начинающейся в позиции 1C заголовка, состоит из двухбайтовых величин смещений и двухбайтовых сегментных значений. Система строит префикс программного сегмента следом за резидентной частью COMMAND.COM, которая выполняет операцию загрузки. Затем COMMAND.COM выполняет следующие действия: u Считывает форматированную часть заголовка в память. u Вычисляет размер выполнимого модуля (общий размер файла в позиции 04 минус размер заголовка в позиции 08) и загружает модуль в память с начала сегмента. u Считывает элементы таблицы настройки в рабочую область и прибавляет значения каждого элемента таблицы к началу сегмента (позиция OE). u Устанавливает в регистрах SS и SP значения из заголовка и прибавляет адрес начала сегмента. u Устанавливает в регистрах DS и ES сегментный адрес префикса программного сегмента. u Устанавливает в регистре CS адрес PSP и прибавляет величину смещения в заголовке (позиция 16) к регистру CS. В случае, если сегмент кода непосредственно следует за PSP, то смещение в заголовке равно 256 (шест.100). Регистровая пара CS:IP содержит стартовый адрес в кодовом сегменте, то есть, начальный адрес программы. После инициализации регистры CS и SS содержат правильные адреса, а регистр DS (и ES) должны быть установлены в программе для их собственных сегментов данных: 1. PUSH DS;Занести адрес PSP в стек 2. SUB AX,AX;Занести нулевое значение в стек 3. PUSH AX; для обеспечения выхода из программы 4. MOV AX,datasegname;Установка в регистре DX 5. MOV DS,AX; адреса сегмента данных При завершении программы команда RET заносит в регистр IP нулевое значение, которое было помещено в стек в начале выполнения программы. В регистровой паре CS:IP в этом случае получается адрес, который является адресом первого байта PSP, где расположена команда INT 20H. Когда эта команда будет выполнена, управление перейдет в DOS. Date: 2015-05-22; view: 484; Нарушение авторских прав |