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 включали утилиту 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

Ранние версии 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]

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

Рекомендации

  1. ^ "Разработка программного обеспечения Криса Сойера" . www.chrissawyergames.com . Проверено 5 января 2023 г.
  2. ^ Ватт, Пегги; Кристин МакГивер (7 января 1985 г.). «Macintosh против IBM PC через год». Инфомир . Том. 7, нет. 1. С. 15–16. ISSN  0199-6649.Макроассемблер IBM PC был выпущен в декабре 1981 года.
  3. Маршалл, Мартин (29 апреля 1991 г.). «Обновление макроассемблера добавляет функции высокого уровня» . Инфомир . Том. 13, нет. 17. с. 21. ISSN  0199-6649.
  4. ^ «Q94314: Код MASM модели 32-битной плоской памяти для Windows NT» . Архивировано из оригинала 13 января 2021 года . Проверено 3 октября 2023 г.
  5. ^ ab RE Харви (2007). «Ассемблеры». Архивировано из оригинала 16 февраля 2008 года . Проверено 4 февраля 2010 г.
  6. ^ «Архивная копия». Архивировано из оригинала 26 января 2009 г. Проверено 24 июня 2008 г.{{cite web}}: CS1 maint: архивная копия в заголовке ( ссылка )
  7. ^ «Белые книги и документация WHDC» . Майкрософт . Проверено 25 сентября 2016 г.
  8. ^ Microsoft Macro Assembler 5.1, Руководство по программированию на смешанных языках . п. 3.

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