Microsoft Macro Assembler ( MASM ) — это ассемблер x86 , использующий синтаксис Intel для MS-DOS и Microsoft Windows . Начиная с MASM 8.0, существуют две версии ассемблера: одна для 16-битных и 32-битных исходных кодов сборки, а другая ( ML64 ) только для 64-битных исходных кодов.
MASM поддерживается Microsoft , но начиная с версии 6.12 он не продается как отдельный продукт. Вместо этого он поставляется с различными Microsoft SDK и компиляторами C. Последние версии MASM включены в состав Microsoft Visual Studio .
Известными приложениями, скомпилированными с использованием MASM, являются RollerCoaster Tycoon , который на 99% написан на ассемблере и создан с использованием MASM. [1]
Самые ранние версии MASM датируются 1981 годом. [2] Они продавались либо как универсальный «Microsoft Macro Assembler» для всех компьютеров x86, либо как OEM-версия специально для IBM PC . В версии 4.0 выпуск IBM был исключен. До версии 3.0 MASM также поставлялся в комплекте с меньшим сопутствующим ассемблером ASM.EXE. Он был предназначен для компьютеров с объемом памяти всего 64 КБ и в нем отсутствовали некоторые функции полной версии MASM, такие как возможность использования макросов кода.
Версии MS-DOS до 4.x включали утилиту Microsoft LINK, которая была разработана для преобразования промежуточных файлов OBJ , созданных MASM и другими компиляторами; однако, поскольку пользователи, которые не программировали, не использовали эту утилиту, она была перенесена в их пакеты компилятора.
Версия 4.0, выпущенная в октябре 1985 года, добавила поддержку 286 инструкций.
Версия 5.0, выпущенная в августе 1987 года, поддерживала 386 инструкций, а также сокращенную мнемонику для дескрипторов сегментов (.code, .data и т. д.), но по-прежнему могла генерировать только исполняемые файлы реального режима.
До версии 5.0 MASM был доступен только как приложение MS-DOS . Версии 5.1 и 6.0 были доступны как приложения MS-DOS и OS/2 . [3]
Версия 6.0, выпущенная в 1991 году, среди прочего, добавила передачу параметров с помощью «invoke» и некоторых других конструкций высокого уровня в дополнение к уже существующим записям высокого уровня. И 6.0, и 6.0B могли работать на процессоре 8086, но могли генерировать простой 32-битный код 386. В 1992 году была выпущена версия 6.1, в которой добавлена поддержка формата объектов COFF, используемого Windows NT, и удалена поддержка OS/2. Версия 6.1 была создана как бимодальный двоичный файл до завершения разработки Win32 API и несовместима с работой в Windows NT из-за отсутствия экспорта. [4]
В 1993 году была добавлена полная поддержка 32-битных приложений защищенного режима и набора команд Pentium . Двоичный файл MASM 6.11 в то время (1993 г.) поставлялся как «бимодальный» (win32, т.е. PE ) двоичный файл, расширенный DOS (с использованием расширителя DOS Phar Lap TNT). Однако файл setup.exe — это исполняемый файл MZ, поэтому он не будет работать в 64-разрядных версиях Windows, а бимодальный файл ml.exe сжат, а decomp.exe — это исполняемый файл NE, поэтому он также не запустится. в 64-битных версиях Windows (если вы надеялись вручную извлечь необходимые ml.exe и ml.err), поэтому для его установки вам фактически потребуется доступ к 32-битной Windows (или MSDOS). Версия 6.11 — последняя версия MASM, работающая под управлением MS-DOS. Был доступен ряд патчей, вплоть до 6.11d, для работы которых требовалась 32-битная Windows, но исправленный ml.exe все еще имеет расширитель Phar Lap dos, поэтому его все еще можно запускать под MSDOS.
Версии с 6.12 по 6.14 были реализованы как исправления для версии 6.11. Эти патчи представляли собой самораспаковывающиеся исполняемые файлы PK (т. е. MSDOS), поэтому не работали под 64-битной Windows. Даже если вы извлекаете их другими способами, patch.exe является исполняемым файлом NE, поэтому его нельзя будет запустить в 64-битной Windows для обновления ml.exe. Если вы работаете в 32-битной версии Windows (или более ранней версии), патч удалит расширитель Phar Lap dos из ml.exe, и его больше нельзя будет запустить в MSDOS. Удаление Phar Lap делает часть MZ исполняемого файла меньше, так что подпись «PE» становится более заметной, в отличие от ситуации с версией 6.11, где подпись PE находилась далеко в файле.
К концу 1997 года MASM полностью поддерживал Windows 95 и включал некоторые инструкции, специфичные для AMD . [5]
В 1999 году Intel выпустила макросы для инструкций SIMD и MMX , которые вскоре после этого стали поддерживаться MASM. С выпуском версии 6.15 в 2000 году Microsoft прекратила поддержку MASM как отдельного продукта, вместо этого включив его в набор инструментов Visual Studio . Хотя он по-прежнему был совместим с Windows 98 , текущие версии Visual Studio — нет. [5] Поддержка 64-битных процессоров не добавлялась до выпуска Visual Studio 2005 с MASM 8.0.
После 25 июня 2015 г. существует как минимум три разных MASM с номером версии 14.00.23026. В Microsoft Visual Studio 2015 Enterprise Edition имеется один мл «amd64_x86» и два мл64: «x86_amd64» и «amd64». Они работают на разных платформах и ориентированы на разные платформы:
Ранние версии MASM создавали объектные модули с использованием формата OMF , который использовался для создания двоичных файлов для MS-DOS или OS/2 .
Начиная с версии 6.1, MASM может создавать объектные модули в формате Portable Executable [6] [7] (PE/COFF). PE/COFF совместим с последними компиляторами Microsoft C, а объектные модули, созданные MASM или компилятором C, можно легко смешивать и компоновать в двоичные файлы Win32 и Win64.
Некоторые другие ассемблеры могут собирать большую часть кода, написанного для MASM, за исключением более сложных макросов.
Документация для версии 5.1 1987 года включала поддержку «Microsoft BASIC, C, FORTRAN, Pascal». [8]
{{cite web}}
: CS1 maint: архивная копия в заголовке ( ссылка )