Заголовок программы (512 байт)
00000: 4D 5A 70 00 02 00 01 00 20 00 00 00 FF FF 04 00 MZ p ☻ ☺ ♦ 00010: 30 00 00 00 00 00 00 00 3E 00 00 00 01 00 FB 71 0 > ☺ √ q 00020: 6A 72 00 00 00 00 00 00 00 00 00 00 00 00 00 00 jr 00030: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 01 00 ☺ 00040: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................... 001F0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 Загрузочный модуль: Сегмент кода (32 байта) 00200: B8 02 00 8E D8 B4 09 BA 00 00 CD 21 B8 00 4C CD ╕ ☻ o╪ ┤ o║ ═! ╕ L= 00210: 21 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00! Сегмент данных (32 байта) 00220: 8F E0 AE A3 E0 A0 AC AC A0 20 E2 A8 AF A0 20 2E Программа типа. 00230: 65 78 65 0A 0D 24 00 00 00 00 00 00 00 00 00 00 exe◙ ♪ $ Сегмент стека (48 байт) 00240: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00250: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00260: 3F 3F 3F 3F 3F 3F 3F 3F 3F 3F 3F 3F 3F 3F 3F 3F???????????????? Рис. П.1.3_2. Листинг и машинный код программы типа.exe Таблица П.1.3_2 Формат заголовка исполняемого.exe – файла на диске
Действия MS DOS при запуске.exe-программы отличаются от действий при запуске программы типа.com, хотя в обоих случаях используется одна и та же функция Exec. 1. Запускаемой программе отводится вся свободная в данный момент оперативная память, в которой определяется начальный сегментный адрес программы (NS0). 2. По нулевому смещению в выделенном для программы сегменте памяти Exec создаёт служебную структуру – префикс программного сегмента PSP. Его размер, как и для COM- программ, равен 256 байт. 3. Вслед за PSP размещается загрузочный модуль программы, а заголовок и таблица настройки в память не копируются. После этого выполняется так называемая настройка адресов. 4. Суть настройки состоит в следующем: компоновщик (Tlink или какой-либо другой) строит exe- модуль относительно некоторого " базового адреса" (в MS DOS программы могут загружаться в произвольную область памяти). Поэтому при загрузке программы к каждому сегментному адресу прибавляется значение начального сегмента программы (NS0). Элементы, требующие настройки, указываются в таблице настройки. Таким образом, устанавливаемые значения регистров для программы рис. П.1.3_2 примут следующие значения: – DS = ES = NS0; – CS = NS0 + 10h + CS0=NS0 +10h; – SS = NS0 + 10h + SS0=NS0 + 14h; – IP = IP0 =00h, SP = SP0 = 30h Здесь CS0, SS0, IP0 и SP0 берутся загрузчиком Exec из заголовка exe- файла, а значение 10h – резервирует пространство (в параграфах) для PSP. 5. После загрузки программы начинается процесс её исполнения, для чего Exec передает управление по адресу cs: ip.
|