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



       

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


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

Относительный адрес стека 60 Адрес стека 13A50

Регистр DS

Загрузчик использует регистр DS для установки начального адреса PSP. Так как заголовок не содержит стартового адреса, то регистр DS необходимо инициализировать в программе следую щим образом:

0004 B8 ---- R MOV AX,DSEG 0007 8E D8 MOV DS,AX

Ассемблер оставляет незаполненным машинный адрес сегмента DSEG, который становится элементом таблицы настройки в заго ловке. С помощью отладчика DEBUG можно просмотреть завершен ную команду в следующем виде:

B8 A313

Значение A313 загружается в регистр DS в виде 13A3. В результате имеем

Регистр Адрес Смещение CS 139F0 00 DS 13A30 40 SS 13A50 60

В качестве упражнения выполните трассировку любой вашей скомпанованной программы под управлением отладчика DEBUG и обратите внимание на изменяющиеся значения в регистрах:

Команда Изменяющиеся регистры PUSH DS IP и SP SUB AX,AX IP и AX (если был не нуль) PUSH AX IP и SP MOV AX,DSEG IP и AX MOV DS,AX IP и DS

Регистр DS содержит теперь правильный адрес сегмента данных. Можно использовать теперь команду D DS:00 для просмотра содержимого сегмента данных DSEG и команду D SS:00 для просмотра содержимого стека.

ФУНКЦИИ ЗАГРУЗКИ И ВЫПОЛНЕНИЯ ПРОГРАММЫ ------------------------------------------------------------

Рассмотрим теперь, как можно загрузить и выполнить программу из другой программы. Функция шест.4B дает возможность одной программе загрузить другую программу в память и при необходимости выполнить. Для этой функции необходимо загрузить адрес ASCIIZ-строки в регистр DX, а

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

адрес блока параметров в регистр BX (в действительности в регистровую пару ES:BX). В регистре AL устанавливается номер функции 0 или 3:

AL=0. Загрузка и выполнение. Данная операция устанавлива ет префикс программного сегмента для новой программы, а также адрес подпрограммы реакции на Cntrl/Break и адрес передачи управления на следующую команду после завершения новой программы. Так как все регистры, включая SP, изменяют свои значения, то данная операция не для новичков. Блок параметров, адресуемый по ES:BX, имеет следующий формат:




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