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 включали утилиту LINK от Microsoft, которая была разработана для преобразования промежуточных 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 . В то время (1993) двоичный файл MASM 6.11 поставлялся как «бимодальный» (win32, т. е. PE ) двоичный файл DOS-расширения (с использованием расширителя Phar Lap TNT DOS). Однако 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 (или более ранней версии), patch удалит dos-расширитель Phar Lap из 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 есть один ml "amd64_x86" и два ml64, "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]
В обзоре трех ассемблеров Майкл Блащак из BYTE в феврале 1989 года обнаружил, что MASM 5.1 был самым медленным и больше всего жаловался на код. Он пришел к выводу, что «к MASM нужно привыкнуть, но он выполняет свою работу», несмотря на «более чем справедливую долю раздражающих причуд и странностей». [9]
{{cite web}}
: CS1 maint: архивная копия как заголовок ( ссылка )