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



       

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


00 Шест.4D5A. 02 Число байтов в последнем блоке: 5B00. 04 Число 512 байтовых блоков в файле, включая заголовок: 0200 (шест.0002х512=1024).

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

06 Число элементов в таблице настройки, находящейся после форматированной части заголовка: 0100, т.е. 0001. 08 Число 16 байтовых элементов в заголовке: 2000 (шест.0020=32 и 32х16=512). 0C Загрузка в младшие адреса: шест.FFFF. 0E Относительный адрес стекового сегмента: 6000 или шест. 60. 10 Адрес для загрузки в SP: 2000 или шест.20. 14 Смещение для IP: 0000. 16 Cмещение для CS: 0000. 18 Cмещение для первого настраиваемого элемента: 1E00 или шест.1E.

После загрузки программы под управлением отладчика DEBUG регистры получают следующие значения:

SP = 0020 DS = 138F ES = 138F SS = 13A5 CS = 139F IP = 0000

Для EXE-модулей загрузчик устанавливает в регистрах DS и ES адрес префикса программного сегмента, помещенного в доступной области памяти, а в регистрах IP, SS и SP - значения из заголовка программы.

Регистр SP

Загрузчик использует шест.20 из заголовка для инициализа ции указателя стека значением длины стека. В данном примере стек был определен, как 16 DUP (?), т.е. 16 двухбайтовых полей общей длиной 32 (шест.20) байта. Регистр SP указывает на текущую вершину стека.

Регистр CS

В соответствии со значением в регистре DS после загрузки программы, адрес PSP равен шест.138F(0). Так как PSP имеет длину шест.100 байтов, то выполняемый модуль, следующий непо средственно после PSP, находится по адресу шест.138F0+100= 139F0. Это значение устанавливается загрузчиком в регистре CS. Таким образом, регистр CS определяет начальный адрес кодовой части программы (CSEG). С помощью команды D CS:0000 в отладчике DEBUG можно просмотреть в режиме дампа машинный код в памяти. Обратите внимание на идентичность дампа и шестнадцатиричной части ассемблерного LST файла кроме операндов, отмеченных символом R.

Регистр SS

Для установки значения в регистре SS загрузчик также использует информацию из заголовка:

Начальный адрес PSP (см.DS) 138F0 Длина PSP 100




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