Это оба MASM (по-видимому), просто разные версии. Я бы обычно использовал официальную (MS) ссылку.
MASM также является частью Windows SDK - если вы его установите, он содержит ML.exe
в каталоге bin
.
Если вы просто используете его для изучения ассемблера, используемая версия MASM не имеет большого значения. В более новых версиях MASM добавлена поддержка 64-битных (ML64.exe
) и более новых инструкций по мере их добавления в набор команд x86, но это все. Основными различиями между разными ассемблерами являются разные диалекты. Существует три основных диалекта ассемблера x86: синтаксис MASM, синтаксис NASM и синтаксис as
в стиле Unix (раньше также использовался Borland TASM, но в настоящее время он практически мертв). MASM, NASM и YASM используют одну и ту же инструкцию и имена регистров, но имеют некоторые слегка отличающиеся соглашения (dword ptr [blah]
против dword [blah]
и т. Д.) И довольно разные языки макросов. MASM также имеет несколько высокоуровневых конструкций, таких как .if
/ .endif
, invoke
и т. Д., Которые не существуют в других ассемблерах. Является ли это преимуществом или нет - дело вкуса, я лично предпочитаю синтаксис стиля NASM, потому что он более регулярный, и я считаю, что макропроцессор удобнее в использовании, но это дело вкуса.
as
- это другое дело. Он использует совершенно другой синтаксис и названия команд, которые отличаются от приведенных в руководствах Intel. Это значение по умолчанию для большинства вариантов Unix (а также для компиляторов, которые исходят из этой среды, например, GCC), но в основном не используются вне этой среды. Текущие версии GNU as
также поддерживают синтаксис Intel, что устраняет большинство синтаксических различий, но в целом as
в основном предназначен как бэкэнд-ассемблер для компиляторов, а не как полноценный макро-ассемблер, поэтому он все еще имеет очень ограниченный набор функций по сравнению с MASM или NASM / YASM.