MASM — Википедия

Microsoft Macro Assembler
Скриншот программы Microsoft Macro Assembler
Тип Компилятор
Автор Microsoft
Разработчик Microsoft
Операционные системы MS-DOS, Windows
Языки интерфейса русский, английский и др.
Первый выпуск 1981
Последняя версия 14.16.27023.1 (7 марта 2017)
Состояние активное
Лицензия Microsoft EULA
Сайт microsoft.com/en-us/down…

MASM (Microsoft Macro Assembler)ассемблер для процессоров семейства x86. Первоначально был произведён компанией Microsoft для написания программ в операционной системе MS-DOS и был в течение некоторого времени самым популярным ассемблером, доступным для неё. MASM поддерживал широкое разнообразие макросредств и структурированность программных идиом, включая конструкции высокого уровня для повторов, вызовов процедур и чередований (поэтому MASM — ассемблер высокого уровня). Позднее[когда?] была добавлена возможность написания программ для Windows. MASM — один из немногих инструментов разработки Microsoft, для которых не было отдельных 16- и 32-битных версий.

Пример программы

[править | править код]

Программа Hello World на MASM32, которая выводит это сообщение и завершается.

    .386     .model flat, stdcall     option casemap :none     include \masm32\include\masm32.inc     include \masm32\include\kernel32.inc     include \masm32\macros\macros.asm     includelib \masm32\lib\masm32.lib     includelib \masm32\lib\kernel32.lib     .code     start:       print "Hello world"       exit     end start 

Пример той же программы на языке MASM версии 4.0 для процессора Intel 8086.

include io.asm    data segment         x db 'Hello world!', '$'    data ends   stack segment stack         db 128 dup (?)   stack ends    code segment          assume cs: code, ds: data, ss: stack  start: mov ax, data         mov ds, ax         lea dx, x         outstr         finish    code ends         end start 

Пример той же программы для MS-DOS на языке MASM версии 6.1 для процессора Intel 8086.

    .model tiny     .code     .startup     mov dx, offset Hello     mov ah, 9     int 21h     .exit     Hello db 'Hello world!$'     end 

В начале 1990-х годов альтернативные ассемблеры, вроде Borland TASM и свободного ассемблера NASM, начали отбирать часть доли рынка MASM. Однако, два события в конце 1990-х позволили MASM сохранить большую часть своей доли: сначала Microsoft прекратила продавать MASM как коммерческий продукт и начала распространять его бесплатно как часть DDK (англ. Device Driver Kit — набор для создания драйверов). Во-вторых, благодаря пакету MASM32 и обучающим программам Iczelion’а Win32 оказалось, что программирование на MASM возможно и в среде Microsoft Windows. В 2000 году MASM 6.15 был выпущен как часть пакета разработки Visual C++ и все версии Visual C++ после 6.0 включали в себя версию MASM, равную версии Visual C++. Позже в Visual C++ 2005 появилась 64-разрядная версия MASM. Вместе с большим сообществом программистов MASM эти события помогли остановить снижение популярности MASM по сравнению с другими ассемблерами. Сегодня MASM продолжает использоваться на платформе Win32, несмотря на конкуренцию с новыми продуктами, такими как NASM, fasm, TASM, HLASM.

Проекты, поддерживающие MASM

[править | править код]

Есть много развивающихся проектов для разработки программного обеспечения, которые поддерживают MASM, включая IDE (например RadASM), отладчики (вроде OllyDbg), и дизассемблеры (включая IDA, интерактивный дизассемблер).

Хотя MASM больше не является коммерческим продуктом, Microsoft продолжает поддерживать исходный код, используемый и в других продуктах Microsoft. С тех пор как Microsoft прекратила продавать MASM отдельно, было выпущено несколько обновлений к производственной линии MASM 6.x (последнее обновление — версия 6.15, которая была включена в Visual C++ 6.0), а после этого — MASM 7.0 в составе Visual C++ .NET 2002, MASM 7.1 в составе Visual C++ .NET 2003, MASM 8.0 в составе Visual C++ 2005 и MASM 9.0 в составе Visual C++ 2008, поддерживающие платформу x64. С версии 11 MASM снова выходит как независимый продукт, имеется 2 среды разработки обычный (qedit) и для юникода (uniedit).