Введение

Ассемблер и отладчик для MS DOS. A86 – это ассемблер для MS DOS, генерирующий код для семейства микропроцессоров Intel x86. Написанный Эриком Айзексоном, он впервые был выпущен как shareware в июне 1986 года. Ассемблер помещается в один исполняемый файл размером 32 КБ и может напрямую создавать COM-файл или объектный файл для использования со стандартным компоновщиком (линкером). В комплекте с ним поставляется отладчик D86. Поддерживая ожидаемый синтаксис x86, A86 в некоторых случаях допускает более простой сокращенный код и не требует директив, таких как ASSUME, SEGMENT и PROC, от которых зависят Microsoft Macro Assembler и другие аналогичные программы того времени. Высокая скорость ассемблирования является его основным преимуществом. Айзексон утверждал, что A86 способен собирать 100 000 строк исходного кода в секунду на процессоре Pentium II или лучше. A86 и D86 предназначены для 16-битных x86 платформ. В середине 1990-х годов Айзексон добавил поддержку 32-битных платформ в виде A386 и D386. Ассемблер не поддерживает 64-битный код.

Особенности A86

Любая метка, состоящая из одной буквы, за которой следует одна или несколько цифр, является локальной и может быть переопределена по мере необходимости, при этом каждое определение заменяет предыдущее. В руководстве рекомендуется использовать `a`–`z` для обычного кода и `A`–`Z` в макросах. Предполагается, что переходы к локальным меткам осуществляются назад, но переход вперед можно указать, добавив символ «>» перед ссылкой на метку (например, `>метка`). Числа, начинающиеся с нуля, интерпретируются как шестнадцатеричные, например, `0123`, вместо использования префикса, такого как "0x" или "$". Суффикс "K" указывает на кибибайты. `16K` эквивалентно 16*1024 или 16384. Несколько регистров можно поместить в стек или извлечь из стека на одной строке исходного кода. `инструкция операнд1, операнд2, операнд3` генерирует одну инструкцию для каждого из трех операндов. Существует сокращенная форма для условного выполнения одной инструкции. `инструкция` выводит две инструкции: условный переход, за которым следует перемещение. Если `return` указана в качестве метки для условного перехода, она автоматически перенаправляется на инструкцию возврата в пределах 8-битного диапазона перехода (например, `>return`). Макросы используют синтаксис, отличный от синтаксиса современных ассемблеров.

Код отпечатка пальца

Ассемблер был разработан для использования определенных кодировок инструкций, функционально эквивалентных друг другу, но вместе формирующих уникальный идентификатор, внедряемый в исполняемый файл. Это упоминается в разделе "Правовые условия" руководства. Этот идентификатор позволяет определить, был ли код скомпилирован с помощью A86, а также различать зарегистрированные и незарегистрированные версии ассемблера. Для проведения такого анализа требуется доступ к исходному коду.