Исполняемый файл DOS MZ
Эта статья нуждается в дополнительных цитатах для проверки . ( апрель 2015 г. ) |
Расширение имени файла | |
---|---|
Тип интернет-СМИ | приложение/x-dosexec, приложение/x-msdos-программа, приложение/x-ms-dos-исполняемый файл |
Магическое число | MZ |
Тип формата | Двоичный , исполняемый файл |
Распространено на | Новый исполняемый файл Линейный исполняемый файл Портативный исполняемый файл |
Исполняемый формат DOS MZ — это формат исполняемого файла, используемый для . EXE- файлы в DOS .
Файл можно идентифицировать по строке ASCII «MZ» ( шестнадцатеричное : 4D 5A) в начале файла (« магическое число »). «MZ» — инициалы Марка Збиковски , одного из ведущих разработчиков MS-DOS . [ 1 ]
Исполняемый файл MZ DOS новее формата исполняемого файла COM и отличается от него. исполняемого файла DOS Заголовок содержит информацию о перемещении , которая позволяет загружать несколько сегментов по произвольным адресам памяти и поддерживает исполняемые файлы размером более 64 КБ; однако этот формат по-прежнему требует относительно небольших ограничений памяти. Эти ограничения позже были обошли с помощью расширителей DOS .
Обработка сегментов
[ редактировать ]Окружение программы EXE, запускаемой DOS, находится в ее префиксе сегмента программы .
Файлы EXE обычно имеют отдельные сегменты для кода, данных и стека. Выполнение программы начинается с адреса 0 сегмента кода , а регистр указателя стека устанавливается на любое значение, содержащееся в информации заголовка (таким образом, если заголовок указывает стек длиной 512 байт, указатель стека устанавливается на 200h). При желании можно не использовать отдельный сегмент стека и просто использовать сегмент кода для стека.
Регистр DS ( сегмент данных ) обычно содержит то же значение, что и регистр CS (сегмент кода), и не загружается фактическим адресом сегмента данных при инициализации EXE-файла; программисту необходимо установить его самостоятельно, обычно это делается с помощью следующих инструкций:
MOV AX, @DATA
MOV DS, AX
Прекращение действия
[ редактировать ]В исходном API DOS 1.x также необходимо было, чтобы регистр CS указывал на сегмент с PSP при завершении программы; это было сделано с помощью следующих инструкций:
PUSH DS
XOR AX, AX
PUSH AX
Завершение программы затем будет выполняться инструкцией RETF, которая извлекает исходный адрес сегмента с PSP из стека, а затем переходит к адресу 0, который содержит инструкцию INT 20h.
API DOS 2.x представил новую функцию завершения программы, INT 21h Function 4Ch, которая не требует сохранения адреса сегмента PSP в начале программы, и Microsoft посоветовала не использовать старый метод DOS 1.x.
Совместимость
[ редактировать ]Исполняемые файлы MZ DOS можно запускать из операционных систем DOS и Windows 9x . 32-битные операционные системы на базе Windows NT могут выполнять их, используя встроенную виртуальную машину DOS (хотя некоторые графические режимы не поддерживаются). 64-битные версии Windows не могут их выполнить. Альтернативные способы запуска этих исполняемых файлов включают DOSBox и DOSEMU .
Исполняемые файлы MZ DOS могут создаваться с помощью компоновщиков, таких как Digital Mars Optlink , MS linker , VALX или Open Watcom 's WLINK; кроме того, FASM может создавать их напрямую.
См. также
[ редактировать ]Дальнейшее чтение
[ редактировать ]- Пол, Матиас Р. (07.10.2002) [2000]. «Re: Запуск COM-файла» . Группа новостей : alt.msdos.programmer . Архивировано из оригинала 3 сентября 2017 г. Проверено 3 сентября 2017 г.
- Матиас Пол (07 октября 2002 г.). «Проблемы, связанные с masm.com(PSP)» . Дискуссионная группа alt.lang.asm .
Ссылки
[ редактировать ]- ^ Внутри Windows: углубленный анализ формата переносимых исполняемых файлов Win32 — журнал MSDN, февраль 2002 г. Архивировано 11 июля 2018 г. на Wayback Machine . «Каждый PE-файл начинается с небольшого исполняемого файла MS-DOS. ... Первые байты PE-файла начинаются с традиционного заголовка MS-DOS, называемого IMAGE_DOS_HEADER. Единственными двумя важными значениями являются e_magic и e_lfanew... . Поле e_magic (слово) должно быть установлено в значение 0x5A4D... В представлении ASCII 0x5A4D — это MZ, инициалы Марка Збиковски, одного из первых разработчиков MS-DOS».