Формат исполняемого файла DOS MZ — это формат исполняемого файла, используемый для файлов . EXE в DOS .
Файл можно идентифицировать по строке ASCII «MZ» ( шестнадцатеричное : 4D 5A) в начале файла (« магическое число »). «MZ» — это инициалы Марка Збиковски , одного из ведущих разработчиков MS-DOS . [1]
Исполняемый файл MZ DOS новее исполняемого формата COM и отличается от него. Заголовок исполняемого файла DOS содержит информацию о перемещении , что позволяет загружать несколько сегментов по произвольным адресам памяти, и поддерживает исполняемые файлы размером более 64k; однако формат по-прежнему требует относительно низких ограничений памяти. Эти ограничения были позже обойдены с помощью расширителей DOS .
Окружение EXE-программы, запущенной DOS, находится в ее префиксе сегмента программы .
Файлы EXE обычно имеют отдельные сегменты для кода, данных и стека. Выполнение программы начинается с адреса 0 сегмента кода , а регистр указателя стека устанавливается на любое значение, содержащееся в информации заголовка (таким образом, если заголовок указывает стек размером 512 байт, указатель стека устанавливается на 200h). При желании можно не использовать отдельный сегмент стека и просто использовать сегмент кода для стека.
Регистр DS ( сегмент данных ) обычно содержит то же значение, что и регистр CS (сегмент кода), и не загружается фактическим адресом сегмента данных при инициализации EXE-файла; программисту необходимо установить его самостоятельно, что обычно выполняется с помощью следующих инструкций:
MOV AX , @ ДАННЫЕ MOV DS , AX
В оригинальном API DOS 1.x также было необходимо, чтобы регистр CS указывал на сегмент с PSP при завершении программы; это делалось с помощью следующих инструкций:
НАЖМИ DS XOR AX , AX НАЖМИ 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 WLINK; кроме того, FASM может создавать их напрямую.