Разработчик(и) | Эрик Айзексон |
---|---|
Стабильный релиз | 4.05 / 14 января 2000 г. |
Операционная система | MS-DOS |
Платформа | x86 |
Тип | Ассемблер |
Лицензия | Запатентованный |
Веб-сайт | eji.com/a86 |
A86 — ассемблер для MS-DOS , который генерирует 16-битный код для семейства микропроцессоров Intel x86 . Написанный Эриком Айзексоном, он был выпущен как shareware в июне 1986 года. Ассемблер содержится в одном исполняемом файле размером 32 КБ и может напрямую создавать COM -файл или объектный файл для использования со стандартным компоновщиком . Он поставляется с отладчиком D86 . [1] [2] Скорость сборки является основным преимуществом, и Айзексо утверждает, что A86 может собирать 100 000 строк исходного кода в секунду на Pentium II или лучше. [3] Айзексоном была добавлена поддержка 32-битных систем в середине 1990-х годов в виде A386 и D386 . [1] [2] Они не распространялись как shareware, но предоставлялись пользователям, зарегистрировавшим A86.
Поддерживая ожидаемый синтаксис x86, A86 и A386 не требуют директив , таких как ASSUME
, SEGMENT
, и PROC
, на которые опираются Microsoft Macro Assembler и другие современные версии. A86 и A386 имеют собственный синтаксис для макросов и локальных меток, который несовместим с другими ассемблерами. Также есть множество синтаксических настроек, позволяющих сделать исходный код более лаконичным.
Семейство продуктов A86 никогда не было портировано на Microsoft Windows , но можно использовать объектные файлы, созданные A386, с помощью компоновщика Windows. [4] Ассемблер не поддерживает 64-битный код.
Любая метка, состоящая из одной буквы, за которой следует одна или несколько цифр, является локальной и может быть переопределена по мере необходимости, при этом каждое определение заменяет предыдущее. В руководстве рекомендуется использовать L1
through L9
для обычного кода и M1
through M9
в макросах . Предполагается, что переходы к локальным меткам являются обратными, но прямой переход можно указать, добавив к ссылке на метку символ «больше» (например, >L2
).
Числа, начинающиеся с нуля, являются шестнадцатеричными , например 00FF
, , вместо использования префикса, например, "0x" или "$". Конечный "K" указывает на кибибайты . [5] 16K
то же самое, что 16*1024 или 16384.
Несколько регистров могут быть помещены или извлечены из одной исходной строки. push eax, edx, ebp
генерирует одну инструкцию для каждого из трех операндов .
Существует сокращение для условного выполнения одной инструкции. if z mov ax,bx
выводит две инструкции: условный переход, за которым следует перемещение.
Если ret
указано как метка для условного перехода, он автоматически выбирает инструкцию возврата в пределах 8-битного диапазона перехода (например, jz ret
).
Макросы используют другой синтаксис, чем современные ассемблеры.
Ассемблер был разработан для использования определенных кодировок инструкций, которые функционально эквивалентны, но вместе создают отпечаток, который встроен в исполняемый файл . Это упоминается в разделе юридических терминов руководства. Отпечаток позволяет определить, был ли код собран с помощью A86, а также различать зарегистрированные и незарегистрированные версии ассемблера. Этот анализ требует доступа к исходному коду . [6]