stringtranslate.com

Microsoft макроассемблер

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

Ранние версии MASM генерировали объектные модули с использованием формата OMF , который использовался для создания двоичных файлов для MS-DOS или OS/2 .

Начиная с версии 6.1, MASM может создавать объектные модули в формате Portable Executable [6] [7] (PE/COFF). PE/COFF совместим с последними компиляторами Microsoft C, а объектные модули, созданные как MASM, так и компилятором C, можно легко смешивать и связывать в двоичные файлы Win32 и Win64.

Ассемблеры, совместимые с MASM

Некоторые другие ассемблеры могут собирать большую часть кода, написанного для MASM, за исключением более сложных макросов.

Поддержка программирования на смешанных языках

Документация для версии 5.1 1987 года включала поддержку « Microsoft BASIC , C, FORTRAN , Pascal ». [8]

Прием

В обзоре трех ассемблеров Майкл Блащак из BYTE в феврале 1989 года обнаружил, что MASM 5.1 был самым медленным и больше всего жаловался на код. Он пришел к выводу, что «к MASM нужно привыкнуть, но он выполняет свою работу», несмотря на «более чем справедливую долю раздражающих причуд и странностей». [9]

Смотрите также

Ссылки

  1. ^ "Chris Sawyer Software Development". www.chrissawyergames.com . Получено 2023-01-05 .
  2. Уотт, Пегги; Кристин Макгивер (7 января 1985 г.). «Macintosh против IBM PC за один год». InfoWorld . Т. 7, № 1. С. 15–16. ISSN  0199-6649.IBM PC Macro Assembler был выпущен в декабре 1981 года.
  3. ^ Маршалл, Мартин (29 апреля 1991 г.). «Обновление Macro Assembler добавляет высокоуровневые функции». InfoWorld . Т. 13, № 17. стр. 21. ISSN  0199-6649.
  4. ^ "Q94314: 32-битная модель плоской памяти MASM-код для Windows NT". Архивировано из оригинала 13 января 2021 г. Получено 3 октября 2023 г.
  5. ^ ab RE Harvey (2007). "Assemblers". Архивировано из оригинала 16 февраля 2008 года . Получено 4 февраля 2010 года .
  6. ^ "Архивная копия". Архивировано из оригинала 2009-01-26 . Получено 2008-06-24 .{{cite web}}: CS1 maint: архивная копия как заголовок ( ссылка )
  7. ^ "WHDC White Papers and Documentation". Microsoft . Получено 25 сентября 2016 г.
  8. ^ Microsoft Macro Assembler 5.1, Руководство по программированию на смешанных языках . стр. 3.
  9. ^ Блащак, Майкл (февраль 1989). «Три ассемблера для MS-DOS». BYTE . стр. 205–209 . Получено 08.10.2024 .

Внешние ссылки