MASM 7.0 в Visual C++ .NET 2002 7.0 (any*) & XP 5.1.2600 DDK НазваниеРазмер (байт)md5Датаml.exe413696b2165bcdd8754d2827ba850f4fbfb93f1/5/2002 3:36ambuild 7.00.9466 / VS.NET 2002 7.0 (any*)ml.exe409600609d5355a9a67a4bd66d38b6d459015d10/26/2000 2:39ambuild 6.15.9030 в комплекте с VS.NET 7 BETA 1ml.exe4136967309504fa896698390f754fb34c3ddea6/7/2001 3:14ambuild 7.00.9254 в комплекте с VS.NET 7 BETA 2ml.exe41369678aac4b5784393fbb4a4b51d1a02d2317/21/2001 7:31pmbuild 7.00.9210 / XP 5.1.2600 DDK*Версия MASM, поставляемая с Visual C++ .NET 2002 7.0, не изменяется после установки пакета обновления 1. Эта версия поставляется с новым Visual C++ .NET 2002 7.0 и Windows XP 5.1.2600 DDK (находится по адресу WINDDK\2600\bin\x86\ml.exe). Другой выпуск XP DDK (5.1.2600.1106) включал в себя тот же файл ml.exe, что и первый DDK, но был датирован 25 марта 2002, 19:22. Помимо косметических различий, существенных изменений, похоже, не произошло. @Version по-прежнему сообщает о предыдущей версии MASM (серия 6.x). Примечательно, что в отличие от 7.1 и всех других более поздних версий MASM, номера сборок которых совпадали с поставляемым набором инструментов Visual Studio, Visual Studio .NET 7.0 BETA 1 выпустила уникальный MASM, который не только сообщал 615 для @Version, но также сообщал 6.15 в командной строке! Вероятно, на данный момент Microsoft еще не завершила внесение изменений в среду сборки, необходимых для полной интеграции ее с набором инструментов Visual Studio. СПИСОК ИЗМЕНЕНИЙ: Год(ы) авторских прав в командной строке: Начиная с версии 7 и далее, Microsoft перестала отображать годы авторских прав, которые раньше отображались в командной строке. Зависимость ML.ERR удалена: Сопутствующий файл ML.ERR, необходимый для запуска MASM, присутствовал почти во всей строке 6.x (кроме версии 6.1a), но, начиная с версии 7 и в дальнейшем, строки сообщения об ошибке отображают строки ml.exe, считанные из этого файла. были перенесены в сам ml.exe. Кроме того, новые встроенные строки сообщений об ошибках теперь имеют формат UNICODE для целей локализации. ПРИМЕЧАНИЕ. Версия ml.exe, выпущенная вместе с XP 5.1.2600 DDK, содержала файл ml.err, который был идентичен файлу ml.err, выпущенному с версией 6.15 (правда, другая дата). Это была ошибка, поскольку было подтверждено, что ml.exe собирается без нее. Версия 6.15 даже НЕ будет пытаться выполнить сборку без этого файла. MASM дополнен блоком ресурсов версии: Хотя MASM был 32-разрядным в течение 4 лет, до сих пор у него никогда не было блока ресурсов версии (просмотрите его, щелкнув ссылку сборки версии выше). Есть одно исключение: MASM386 имел блок ресурсов версии, но он считался нестандартным и устаревшим по сравнению с остальными бинарными файлами Microsoft Win32. Все будущие версии MASM также будут содержать блок ресурсов версии. ЧТО ГОВОРИЛИ ДРУГИЕ: Проверка переполнения буфера и стека, предупреждения ССЫЛКА: r_harvey
MASM 7.1 в Visual C++ .NET 2003 7.1 НазваниеРазмер (байт)md5Датаml.exe413696cae874c25467b4566a56b8c9cdc004467/11/2006 6:15pmbuild 7.10.6030 / VS.NET 2003 PRO 7.1ml.exe41369663ab5c7120e7b3582eaac18cf0bdcf0f3/24/2005 4:25pmbuild 7.10.4035 / WS03 SP1 DDKВерсия MASM была выпущена в основном вместе с Visual Studio .NET 2003 7.1 и включена в пакет Windows Server 2003 SP1 DDK 3790.18030, расположенный в «WINDDK\3790.1830\bin\x86». СПИСОК ИЗМЕНЕНИЙ: Поддержка SAFESEH: Добавлены директива .SAFESEH и параметр /safeseh. .SAFESEH identifier Регистрирует функцию как структурированный обработчик исключений. идентификатор должен быть идентификатором локально определенного PROC или EXTRN PROC. Метка не допускается. Для директивы .SAFESEH требуется параметр командной строки /safeseh ml.exe. Параметр командной строки описывается в командной строке следующим образом: Метит объект как не содержащий обработчиков исключений или содержащий обработчики исключений, все из которых объявлены с помощью .SAFESEH. Страница 345 книги «Практический анализ вредоносных программ» проливает некоторый свет на SafeSEH: В отличие от MASM 7.0, @Version правильно сообщает версию, соответствующую номеру сборки; в данном случае 710
MASM 8.0 в Visual C++ 2005 8.0 НазваниеРазмер (байт)md5Датаml.exe3502084bd78317f0f9e4897d3569dbbc8fad394/21/2006 6:11pmbuild 8.00.50727.104 / VS 2005 8.0 EXPRESS, PRO & ACADEMICml.exe344576735e3ee3de15a3d96dce84b5242cef339/5/2004 12:15ambuild 8.0.40904.0 / VS 2005 8.0 BETA REFRESH / Win32ml64.exe557056ee2bb5d50d50152bcbf588a8c74414749/5/2004 2:06ambuild 8.00.40904 / VS 2005 8.0 BETA REFRESH / Win64ml64.exe36966482b8948213657dc7e221ed472772e4a99/5/2004 1:46ambuild 8.00.40904 / VS 2005 8.0 BETA REFRESH / Win64 PE32ml64.exe556800e4bbd9390ee30be1fca84b5a2e6c2d5612/2/2006 6:17ambuild 8.00.50727.762 / VS 2005 8.0 SP1 PRO & ACADEMIC / Win64ml64.exe381184d17e7a547c2af817fe82b2a0535b10d012/2/2006 6:20ambuild 8.00.50727.762 / VS 2005 8.0 SP1 PRO & ACADEMIC / Win64 PE32Visual Studio 2005 предлагала то, чего раньше никогда не было: Express Edition. Это издание содержало полнофункциональную, хотя и ограниченную, интегрированную среду разработки с компиляторами и инструментами для образовательных/пробных целей, доступную для загрузки совершенно бесплатно (конечно, с лицензионными ограничениями). Эти инструменты включали версию MASM 8 для Win32, хотя ее нужно было загружать отдельно (MASMsetup.EXE, выпущенный 7 июня 2006 г.) с веб-сайта Microsoft исключительно для Express Edition. Эта версия была первой версией MASM, предложенной Microsoft совершенно бесплатно. Выпуск Express Edition также ознаменовал собой первый случай, когда компилятор C# от Microsoft предлагался бесплатно. Компилятор C/C++ впервые был предложен бесплатно в отдельном пакете загрузки: «Visual C++ Toolkit 2003» (VCToolkitSetup.exe) в предыдущем выпуске Visual C++ (т. е. 7.1). Сюда входили только компилятор C/C++, компоновщик и некоторые библиотеки/включения, но больше ничего. Этот набор инструментов был заменен последующими выпусками Express и Community Edition, предоставляющими доступ к полнофункциональной IDE и инструментам. Эта версия также ознаменовала собой дебютный общедоступный выпуск Win64 MASM (ml64.exe) для архитектуры amd64 (также известной как x64, x86-64, EM64T, Intel 64), который поставлялся с профессиональной и академической версиями Visual Studio. Бесплатно будет предлагаться только версия Win32, и то только через пакет MASMsetup.EXE (дополнение). В качестве альтернативы полнофункциональные 64-битные БЕТА-инструменты (включая 64-битные ассемблеры и компиляторы) по-прежнему бесплатно доступны в пакете Microsoft Visual Studio 2005 BETA REFRESH. Как и в случае с MASMsetup.EXE, вы можете извлечь файлы, содержащиеся в этих файлах установки (а также вложенные файлы установки), используя обычную программу извлечения архивов, такую как WinRAR и 7Zip. С появлением нового 64-битного MASM Microsoft включает как 64-, так и 32-битные варианты (PE32+ и PE32 соответственно), позволяющие выполнять 64-битную сборку в 32-битных или 64-битных версиях Windows. Следует отметить, что версии MASM, предлагаемые в бесплатных выпусках (Express/Community), идентичны версиям, представленным в розничных выпусках. Единственная разница — это лицензионные ограничения и временные метки файлов. Это была первая версия 32-битного MASM, которая зависела от чего-либо, кроме kernel32.dll (за исключением NTDLL.DLL в версиях 6.1 и 6.1a, выпущенных примерно 13 годами ранее)! MASM теперь зависел от библиотеки времени выполнения Visual C MSVCR80.DLL и ADVAPI32.DLL. Надо отдать должное Microsoft, они сократили размер исполняемого файла с 404 КБ в версии 7 до 342 КБ в версии 8, освободив 62 КБ. Исполняемый файл фактически стал меньше, чем каждая версия MASM, выпущенная после 6.00B (14 лет назад), которая составляла 244 КБ! До версии 8 Microsoft, должно быть, статически связывалась с библиотекой времени выполнения C и, возможно, с другими. Проблема теперь в том, что MSVCR80.DLL имеет размер 621 КБ, поэтому вам придется носить с собой эту штуку с MASM 8, если вы также не хотите установить всю Visual Studio 2005 8.0. Большинство не считает это проблемой, поскольку в настоящее время не только дисковое пространство дешево, но и если вы хотите связать свой объектный код, вам понадобится компоновщик (link.exe). Кроме того, компоновщик зависит от различных исполняемых DLL, начиная с версии 6.15, так что нам следует привыкнуть к раздуванию. СПИСОК ИЗМЕНЕНИЙ: Выражения MASM теперь являются 64-битными значениями. В предыдущих версиях выражения MASM представляли собой 32-битные значения. Поддержка инструкций SSE3 (также известных как PNI, новые инструкции Prescott), представленная Intel 1 февраля 2004: ADDSUBPDADDSUBPSFISTTPHADDPDHADDPSHSUBPDHSUBPSLDDQUMONITORMOVDDUPMOVSHDUPMOVSLDUPMWAIT Инструкция __asm int 3 вызывает компиляцию функции в native. теперь документированы следующие: ALIAS (MASM) и .FPO. добавлены операторы: IMAGEREL, HIGH32, LOW32 и SECTIONREL. добавлены инструкции для шлюза вызова .686 (вариант Intel и AMD): SYSENTER SYSEXIT (требуется .686P) SYSCALL SYSRET (требуется .686P) добавлены директивы: MMWORD (64-битный тип данных для MMX) XMMWORD (128-битный тип данных для SSE) SQWORD (QWORD со знаком / 8 байт со знаком / версия недокументированная) Директива SEGMENT теперь поддерживает дополнительные атрибуты. Изменения в параметрах командной строки: /omf теперь подразумевает /c ml.exe не поддерживает связывание объектов формата OMF. /errorReport Опция «Сообщать о внутренних ошибках ассемблера в Microsoft» добавлена в ml.exe и ml64.exe. /Sc «Создание времени в листинге» больше не поддерживается. Microsoft либо больше не должна думать, что люди беспокоятся о такте каждой инструкции, либо может оказаться слишком сложно поддерживать тайминг каждой инструкции на различных типах процессоров. На новых процессорах также может быть невозможно получить точные тайминги. В официальной документации версий 7.1 и 8.0 эта опция больше не указана: /Sg (код asm в листинге) (опция все еще работает, но, похоже, является синонимом /Sa) В этих документах также говорится: /w теперь подразумевает /W0 и /WX вместо просто /W0 Этот параметр был добавлен в документацию (хотя он присутствовал в командной строке версии 7.1): /X (игнорировать переменную среды INCLUDE) H2INC.exe не будет поставляться в Visual C++ 2005. Если он вам все еще нужен, используйте предыдущую версию. Знакомство с 64-битным ассемблером (ml64.exe): ml64 — это версия MASM для архитектуры x64. Он объединяет файлы .asm x64 в объектные файлы x64. Встроенный язык ассемблера не поддерживается компилятором x64. Кроме того, следующие аргументы командной строки, доступные для 16/32-разрядной версии, недоступны для ml64: /AT (tiny модель) /coff (общий формат объектного файла) /omf (формат файла объектного модуля) /Cu (идентификаторы в верхнем регистре) /FPi (исправления эмулятора с плавающей запятой) /Gc (соглашение о вызовах FORTRAN или Pascal) /Gd (соглашение о вызовах в стиле C) /GZ (соглашение о вызовах stdcall) /H (значащие символы внешнего имени) /safeseh (без обработчиков исключений или все обработчики .SAFESEH.) /Zm (совместимость с M510) Следующие директивы MASM были добавлены для ml64 (x64): .ALLOCSTACK .ENDPROLOG .PUSHFRAME .PUSHREG .SAVEREG .SAVEXMM128 .SETFRAME PROC (обновлен синтаксисом только для x64) ЧТО ГОВОРИЛИ ДРУГИЕ: Поддержка набора инструкций SSE3: ССЫЛКА: Статья Intel: Streaming Simd Extensions 3/VS.NET 2003 ССЫЛКА: pcdosretro Быстрое время компиляции, более строгая проверка типов, отдельные 32-битные и 64-битные ассемблеры, в 64-битной версии отсутствуют многие функции: «Одна из замечательных особенностей MASM 8.0 (кроме более быстрого времени компиляции) — это более строгая проверка типов». «Наверное, самая разочаровывающая часть MASM 8 заключается в том, что Microsoft решила разделить ассемблер: один для 32-битного и один для 64-битного типа. А 64-битной версии не хватает многих качеств своего старшего брата. не поддерживает многие конструкции более высокого уровня или соглашения о вызовах. Поэтому нет .IF, .WHILE или автоматического объявления параметров функции. Второстепенные nits включают отсутствие поддержки украшения имени функции C++ и отсутствие поддержки соглашений о вызовах на основе регистров (таких как __fastcall Это только усложняет задачу интеграции 32-битного и 64-битного ассемблерного кода с C и C++». ССЫЛКА: Блоги Phoenix Technologies, 2006 Различные мнения заключаются в том, что MASM 8 сломал код, который работал с предыдущими версиями: «Я пробовал ML.exe и Link.exe из последней версии VisualStudio 2005, но это отстой. Linker 8.0 не поддерживает некоторые переключатели командной строки, ассемблер иногда дает сбой с хорошим (хорошо собранным всеми предыдущими версиями) кодом» «Я согласен, что ML.EXE 8.00 из Visual Studio 2005 не так уж хорош». ССЫЛКА: Форум Winasm ОШИБКИ, ИСПРАВЛЕННЫЕ в версии 8: ССЫЛКА: Руководство JWasm. «TYPE xmm0» вернет 10 в Masm v6 и v7 — правильное значение — 16. для Masm v6 и v7, если определен массив > 64 КБ и выбран выходной формат OMF, размер массива будет только по модулю 10000h. молчаливое усечение непосредственных констант: Masm v6 и v7 без ошибок примет строку mov [word_variable],12345h. Если раздел содержит более 0FFFFh перемещений в COFF, количество перемещений, хранящееся в объектном модуле, представляет собой просто значение младшей 16-битной половины счетчика перемещений.
MASM 9.0 в Visual C++ 2008 9.0 НазваниеРазмер (байт)md5Датаml.exe36196816ca0bd9537b96e91efdd234007999cb7/30/2008 12:05pmbuild 9.00.30729.01 / VS 2008 9.0 (any*) / Win32ml64.exe387064009923b2441a8bb3e6686db8aa15e5f67/30/2008 1:58pmbuild 9.00.30729.01 / VS 2008 9.0 (any*) / Win64ml64.exe308216aa9d358c6f5f20772aaaff4455326dd77/30/2008 2:11pmbuild 9.00.30729.01 / VS 2008 9.0 (any*) / Win64 PE32ml.exe3527682a2b8d75e359e6311de1195e65dbf2522/8/2010 7:18pmbuild 9.00.30729.207 / WDK 7.1 7600.16385.1 / Win32ml64.exe29900869fa9f19d8a7ac3ea85f867415016a022/8/2010 7:18pmbuild 9.00.30729.207 / WDK 7.1 7600.16385.1 / Win64 PE32*Версия MASM, поставляемая с Express Edition, идентична версии розничной версии; для Express Edition требовался пакет обновления 1 для получения MASM. Он также распространялся вместе с комплектом драйверов Windows (WDK) 7.1.0. Это была последняя полнофункциональная версия MASM, поддерживавшая устаревший 16-битный код DOS и процессоры семейства 80x86 до версии 386. В MASM 10 эта поддержка удалена. Это была первая версия MASM, для которой требовалась Windows 2000, в отличие от Windows 95, которая требовалась для всех предыдущих версий, начиная с 6.12. Список изменений, приведенный ниже, основан на информации MSDN, найденной в VS2008 Compiler Intrinsics. Компилятор C/C++ задокументировал поддержку новых встроенных функций, отраженных в новых поддерживаемых наборах инструкций MASM, но ни слова об изменениях MASM. СПИСОК ИЗМЕНЕНИЙ: Поддержка нового набора команд: SSSE3 (Supplemental Streaming SIMD Extensions 3), выпущенный Intel 26 июня 2006 SSE4.1, SSE4.2, SSE4A (Streaming SIMD Extensions 4, также известное как «HD Boost»), выпущенное Intel 27 сентября 2006 AES (Новые инструкции расширенного стандарта шифрования или AES-NI), предложенный Intel в марте 2008 ЧТО ГОВОРИЛИ ДРУГИЕ: Руководство JWasm: Исправлены ошибки в версии 9: печально известная ошибка «вызова»: если аргумент вызова необходимо расширить (например, с BYTE или WORD до DWORD), генерируется плохой код. ССЫЛКА: Руководство JWasm Выдающиеся ошибки: Поддержка подстановочных знаков (*.asm) прекращена с версии 8.0. ССЫЛКА: Форум MASM Вы можете передать в макрос больше аргументов, чем необходимо: include \masm32\include\masm32rt.inc MBox MACRO text:REQ, title:REQ, style:REQ ; 3 arguments received invoke MessageBox, 0, text, title, style ENDM .code MyTitle db "Ciao", 0 start: MBox 0, chr$("Message text, not title!"), addr MyTitle, MB_OK ; 4 arguments passed exit end start ССЫЛКА: Форум MASM Сборка становится медленной, и ML может в конечном итоге зависнуть из-за буферов в памяти более 0,6 Мбайт: .data? MySlowBuffer db 600000 dup(?) ; 0.6 mega: about 5 seconds Обходной путь — макрос, использующий директиву ORG (этой идеей я обязан Drizz и MichaelW): include \masm32\include\masm32rt.inc mkbuf MACRO var, BufLen LOCAL lbl .data? align 4 lbl LABEL byte ORG $+BufLen-1 db ? .data var dd lbl ;; define it in the data section .code ENDM .data? ; MySlowBuffer db 600000 dup(?) ; 0.6 mega: about 5 seconds .code start: mkbuf MyBuffer, 100000000 ; one-hundred mega invoke MessageBox, 0, chr$("Done!"), chr$("Fat buffer:"), MB_OK exit end start ССЫЛКА: Форум MASM Проблема смещения: обе версии этого кода работают для ml 6.14 и JWasm, но ml 9.0 говорит «ошибка A2070: неверные операнды инструкций». .data MyAccels ACCEL <FCONTROL or FVIRTKEY, VK_S, IdMenuSave> LastAccel ACCEL <FVIRTKEY, VK_ESCAPE, IdEscape> . . . .code invoke CreateAcceleratorTable, addr MyAccels, 1+(offset LastAccel-MyAccels)/SIZEOF ACCEL invoke CreateAcceleratorTable, addr MyAccels, 1+(dword ptr LastAccel-dword ptr MyAccels)/(SIZEOF ACCEL) Обходной путь пока не найден, кроме принесения в жертву регистра... ССЫЛКА: Форум MASM Руководство JWasm: ошибки ВСЕ ЕЩЕ ПРИСУТСТВУЮТ в версии 9 (возможно, исправлены в будущих версиях): Многие из этих ошибок достаточно старые, поэтому, благодаря Microsoft, они, вероятно, стали «фичами». Неизвестно, в какой именно версии MASM возникла каждая ошибка, но многие из них присутствовали в версиях «золотого стандарта» MASM 6.14 и 6.15, что, вероятно, способствовало тому, что их не исправлять. Хотя возможно, что некоторые или все из них никогда не будут исправлены, возможно, некоторые из них были исправлены в версии 10 и/или более поздних версиях. Приведенный ниже список ошибок был скопирован из документации JWAsm (ближайший доступный и бесплатный клон MASM), но JWAsm исправил их все, начиная с версии 2.11a (выпущенной 16 ноября 2013 г.)! PROTO, дважды содержащиеся в исходном коде, привели к созданию записи EXTDEF в объектном модуле. вложенная структура может вызвать GPF в Masm, если начальное смещение встроенной STRUCT необходимо отрегулировать из-за выравнивания. определение огромных массивов в Masm происходит очень медленно и может даже вызвать тупик, если в качестве выходного формата выбран COFF. Masm не помечает недопустимые числа в строках инициализатора структуры/массива. если где-то в исходном коде определен псевдоним и указана таблица символов, в Masm возникает ошибка «Общая ошибка», если формат вывода — OMF. Тип «приведение» для элементов данных DWORD, определенных в 32-битном сегменте, игнорируется Masm, т. е. «dd Far16 ptr <символ>» будет генерировать исправление Near32 вместо Far16. если директива ALIGN должна добавить 5 байтов в 32-битные сегменты кода, Masm включает код операции «add eax,0», который не является пустым, поскольку флаги изменяются. предварительно обработанный вывод с опцией -EP может ошибочно содержать текстовые макросы и вызовы функций макросов, если макросы расположены в строке инициализации структурированной переменной. Masm генерирует неправильный код, если условный переход сочетается с приведением типа, которое изменяет величину смещения. Примеры: «jz near32 ptr . . .» в 16-битном коде или «jz near16» в 32-битном коде. если аргументы, переданные Masm, заканчиваются опцией, которая ожидает параметр (т. е. «ml -c -Fo»), может произойти «Общая ошибка». За элементами данных с плавающей запятой в Masm может следовать любой суффикс (пример: REAL4 1.0foo, 2.0bar). JWasm этого не примет. Если локальный объект определен внутри макроса, Masm создаст для него уникальное имя. Имя создается с помощью '??' в качестве префикса, за которым следует шестнадцатеричное число из 4 цифр. Однако проверка на переполнение отсутствует, поэтому, если общее количество локальных значений во всех макросах превысит 65536, возникнут странные ошибки. Если для -coff с помощью директивы ALIAS определено слабое внешнее значение, создается недопустимое исправление, а также странная запись в таблице символов модуля. Если символическая константа (=equate) опубликована в формате OMF, Masm сохранит значение символа в 16-битной записи, если оно находится в диапазоне -32768...65535. Если на символ ссылаются в другом модуле как на 32-битное число, оно всегда расширяется нулями и никогда не расширяется знаком; следовательно значения -1...-32768 станут 65535...32768. если метки данных становятся общедоступными с помощью опции -Zf (а не директивы PUBLIC), их имена не оформляются. Кроме того, если формат COFF, они не станут настоящими общедоступными, они просто будут включены в таблицу символов с классом «статический». ССЫЛКА: Руководство JWasm
MASM 10.0 в Visual C++ 2010 10.0 НазваниеРазмер (байт)md5Датаml.exe397120c60f9e0657e639019388c6c3f223aa983/19/2010 2:02pmbuild 10.00.30319.01 / Win32ml64.exe4524243c024c12974359fab262afe9789a7b5d3/19/2010 2:02pmbuild 10.00.30319.01 / Win64 / Retail Onlyml64.exe349000660f05d6f2c7016b2cf72964a16ed0e43/19/2010 2:02pmbuild 10.00.30319.01 / Win64 PE32ml.exe4114562d0869f6bb8725501c4d476606044f192/21/2011 6:03pmbuild 10.00.40219.01 SP1 / Win32ml64.exe474952f1f1958ac367e5c31c9d25588c95af442/21/2011 7:53pmbuild 10.00.40219.01 SP1 / Win64 / Retail Onlyml64.exe36333639f9d0d63e99d255e745faf4050ca83c2/21/2011 7:53pmbuild 10.00.40219.01 SP1 / Win64 PE32Visual Studio 10.0 Express выпустила 32-битные исполняемые версии (PE32) ассемблеров ml.exe и ml64.exe, те же, что были выпущены в розничных выпусках, за исключением других временных меток. В выпуске Express Edition не было 64-разрядного файла ml64.exe. Были небольшие различия в двоичном исполняемом файле исходной версии и SP1. Эти различия, скорее всего, связаны с изменением номера сборки в блоке ресурсов версии, но без изменений функциональности. Версия 10.0, появившаяся через 29 лет после своей первоначальной версии в 1981, внесла одно из самых значительных изменений в историю MASM. 16-разрядные сборки для DOS и процессоры до 32-разрядных режимов 386 больше не поддерживаются. Это была первая версия MASM, для которой требовалась как минимум Windows XP. СПИСОК ИЗМЕНЕНИЙ: Поддержка набора инструкций AVX (расширенные векторные расширения) (предложено Intel в марте 2008) Поддержка регистров YMMx; то есть ymm0-ymm8 для x86 Добавление типа данных YMMWORD поддерживает 256-битные мультимедийные операнды, включенные в инструкции Intel Advanced Vector Extensions (AVX). Несколько директив были удалены из компилятора Microsoft Macro Assembler Reference. Удаленные директивы: .186, .286, .286P, .287, .8086, .8087 и .NO87. В ML.exe удалены следующие параметры командной строки (хотя Microsoft не обновила их в справке): /AT «Включить tiny-модель (COM-файлы)» /FPi «Использовать эмулятор 80x87» /H «Установить максимальную длину внешнего имени» ЧТО ГОВОРИЛИ ДРУГИЕ: Поддержка AVX для x86 и x64 ССЫЛКА: Блоги MSDN 2009 ССЫЛКА: Википедия: Расширение схемы кодирования для векторных расширений ССЫЛКА: pcdosretro
MASM 11.0 в Visual Studio Express 11.0 (2012) НазваниеРазмер (байт)md5Датаml.exe4346081e94f1e7fdea87a5e0cc22463f298c147/26/2012 7:08pmbuild 11.00.50727.1 / Win32ml64.exe388536a333d57ee9d988c11584fca2114f28d17/26/2012 7:08pmbuild 11.00.50727.1 / Win64 PE32Первая версия MASM (и всего набора инструментов Visual Studio), для которой требовалась операционная система как минимум Windows Vista. Это изменение было внесено в заголовок PE. Помимо этого, официального списка изменений не было опубликовано, и разница в документации MSDN также не выявила никаких изменений.
MASM 12.0 в Visual Studio 12.0 (2013) НазваниеРазмер (байт)md5Датаml.exe438920248f463dc5dbb770bc695c7fdc647d2410/5/2013 2:38ambuild 12.00.21005.1 из VS 2013 Express for Desktop / Win32ml64.exe3933600fc4a6cc54cc41e62ddc20a58580d61c10/5/2013 2:38ambuild 12.00.21005.1 из VS 2013 Express for Desktop / Win64 PE32ml.exe439416ab9bb772f3e2c40dea3942ee3b960eb311/1/2014 12:46ambuild 12.00.31101.0 из VS 2013 Community UPDATE 4 / Win32ml64.exe5177446dff37bc4dbc74121fd6b01d9c987e2a10/31/2014 8:44pmbuild 12.00.31101.0 из VS 2013 Community UPDATE 4 / Win64ml64.exe393344918bf14035f6a5859941f7e8f81f1d1911/1/2014 12:46ambuild 12.00.31101.0 из VS 2013 Community UPDATE 4 / Win64 PE32Набор инструментов Visual Studio 12.0 (2013 г.) (включая эту версию MASM) был отмечен дебютным выпуском Community Edition: бесплатной версии Visual Studio для частных лиц, научных кругов, проектов с открытым исходным кодом и малого бизнеса, функционально эквивалентной профессиональной версии. Версия без функций CodeLens и Team Foundation Server. Microsoft, как ни странно, продолжала выпускать бесплатную и урезанную версию Express Edition. Выпуски Visual Studio Community и Express включали MASM. К сожалению, официального списка изменений не было опубликовано, и разница в документации MSDN также не выявила никаких изменений.
MASM 14.0 в Visual Studio 14.0 (2015) НазваниеРазмер (байт)md5Датаml.exe446600977a2329c414f9f83d08a2806a3708576/25/2015 11:34pmbuild 14.00.23026.0 из VS 2015 Community 14.0.23107.0 D14REL / Win32ml64.exe52596843149845421ecf4e7c4636c512ec1c8a6/25/2015 11:15pmbuild 14.00.23026.0 из VS 2015 Community 14.0.23107.0 D14REL / Win64ml64.exe4010400d7c443b13fa36f7aa7b6cdf58967e966/25/2015 11:34pmbuild 14.00.23026.0 из VS 2015 Community 14.0.23107.0 D14REL / Win64 PE32ml.exe448144b367521929cf508b3970656062f94be912/20/2016 2:01pmbuild 14.0.24218.2 в комплекте с VS 2017 Communityml64.exe52853627ce9ec0761b73ecca6d58d1353dedc912/20/2016 2:04pmbuild 14.0.24218.2 в комплекте с VS 2017 Community / Win64ml64.exe402584147c157c739ebb6f4b47ceb2776ed22a12/20/2016 2:01pmbuild 14.0.24218.2 в комплекте с VS 2017 Community / Win64 PE32Это должна была быть MASM 13.0, но весь набор инструментов Visual Studio пропустил «несчастливое» число в пользу 14.0. В 2013 Microsoft подвергся критике со стороны суеверных людей за выпуск Visual Studio 2013. Microsoft не повторяют одну и ту же ошибку дважды! В этой версии библиотека зависимостей среды выполнения C Visual Studio 14.0 (2015) была реструктурирована, что затронуло большинство инструментов, включая MASM. То, что раньше было MSVCR140.DLL, теперь разбито на VCRUNTIME140.DLL и различные библиотеки DLL «api-ms-win-crt-CCC-VVV», где CCC — это категория, а VVV — версия. Как и в случае с двумя предыдущими основными версиями MASM, для этой версии не было опубликовано официального списка изменений, и анализ документации MSDN не выявил никаких изменений. Дополнительное примечание, которое может представлять интерес, — некоторые новые зависимости, принятые компоновщиком Microsoft: Для компоновщиков x86 и x64 требуется среда выполнения Microsoft C++ (MSVCP140.DLL). При связывании минимального модуля x64 компоновщику требуется MSPDBCORE.DLL, независимо от того, создается PDB или нет.
MASM 14.1 в Visual Studio 14.1 (2017) НазваниеРазмер (байт)md5Датаml.exe448120ecc043b8d870abea675ee355817ced4c7/21/2017 5:22pmbuild 14.10.25019.0 из VS 2017 Communityml64.exe53055237f3b9efb39bf0d161297cec8f3f37217/21/2017 5:22pmbuild 14.10.25019.0 из VS 2017 Communityml64.exe404600bc79bb646b9d7999cbf99994bd4523687/21/2017 5:22pmbuild 14.10.25019.0 из VS 2017 CommunityСледующее издание набора инструментов Visual Studio (2017) изначально началось с версии 14.1, но по состоянию на конец 2017 оно находится в диапазоне 15.x из-за изменений, которые Microsoft внесла в свой метод управления версиями сборки. Конкретный номер версии больше не привязан к году выпуска, начиная с 2017. На данный момент набор инструментов Visual Studio настолько велик, что Microsoft прекратила выпуск DVD-образов ISO-установщика. Теперь пользователь вынужден использовать свой веб-загрузчик для загрузки отдельных компонентов, которые ему нужны. Наборы инструментов, включающие MASM (а также другие связанные инструменты Visual C++), присутствуют в любом из следующих компонентов: Microsoft.VisualStudio.Product.BuildTools (инструменты сборки Visual Studio) Microsoft.VisualStudio.Workload.NativeMobile (разработка мобильных устройств на C++) Microsoft.VisualStudio.Workload.NativeDesktop (разработка настольных компьютеров на C++)