Из Википедии, свободной энциклопедии
Перейти к навигации Перейти к поиску

A86 - это коммерческий ассемблер для MS-DOS, который генерирует код для семейства микропроцессоров Intel x86 . Написанный Эриком Исааксоном, он был впервые выпущен как условно-бесплатное ПО в июне 1986 года. Ассемблер содержится в одном исполняемом файле размером 32 КБ и может напрямую создавать COM-файл или объектный файл для использования со стандартным компоновщиком. Он поставляется с отладчик , D86 . [1] [2]

Поддерживая ожидаемый синтаксис x86, A86 в некоторых случаях допускает несколько более простые сокращения и не требует директив, таких как ASSUMEи PROC, на которые полагаются Microsoft Macro Assembler и другие современники. Скорость сборки - главное преимущество. Исааксон утверждал, что A86 может собирать 100 000 строк исходного кода в секунду на Pentium II или лучше. [3]

A86 и D86 нацелены на 16-битные платформы x86. В середине 1990-х Isaacson добавил 32-битную поддержку в виде A386 и D386 . [1] [2] Они не распространялись как условно-бесплатное ПО, но предоставлялись пользователям, зарегистрировавшим A86.

Семейство продуктов A86 никогда не переносилось на Microsoft Windows, хотя можно использовать объектные файлы, созданные A386, с компоновщиком Windows. [4] Ассемблер не поддерживает 64-битный код.

Особенности A86 [ править ]

Любая метка, состоящая из одной буквы, за которой следует одна или несколько цифр, является локальной и может быть переопределена при необходимости, при этом каждое определение заменяет предыдущее. В руководстве рекомендуется использовать L1сквозной L9для обычного кода и M1сквозной M9в макросах. Предполагается, что ветвления к локальным меткам являются обратными, но прямое ветвление может быть указано путем добавления к ссылке метки префикса символа «больше» (например, >L2).

Числа, начинающиеся с нуля, являются шестнадцатеричными, например 00FF, вместо использования настраиваемого префикса. Буква «K» в конце означает кибибайты . [5] 16K то же самое, что 16 * 1024 или 16384.

Несколько регистров могут быть вставлены или извлечены из одной и той же исходной строки. push eax, edx, ebpгенерирует по одной инструкции для каждого из трех операндов.

Есть сокращение для условного выполнения одной инструкции. if z mov ax,bxвыводит две инструкции: условную ветвь, за которой следует перемещение.

Если retуказан как метка для условного перехода, он автоматически нацелен на инструкцию возврата в пределах 8-битного диапазона ветвления (например, jz ret).

Макросы используют другой синтаксис, чем современные ассемблеры.

Отпечаток кода [ править ]

Ассемблер автоматически встраивает «отпечаток пальца» в сгенерированный код посредством определенного выбора функционально эквивалентных кодировок инструкций. Об этом говорится в разделе руководства, посвященном юридическим терминам. Отпечаток пальца позволяет определить, был ли код собран с помощью A86, а также различать зарегистрированные и незарегистрированные версии ассемблера. Для этого анализа требуется доступ к исходному коду. [6]

Ссылки [ править ]

  1. ^ a b Исааксон, Эрик (2008). «Ассемблер A86 / A386 и отладчик D86 / D386» . Архивировано 2 июля 2008 года . Проверено 2 июля 2008 .
  2. ^ а б Рэндалл Хайд. "Какой ассемблер лучший?" . Архивировано из оригинального 15 мая 2008 года . Проверено 18 мая 2008 .
  3. ^ Айзексон, Эрик (2006). «Характеристики A86 / A386 и D86 / D386» .
  4. ^ Айзексон, Эрик (2006). «Программирование A386 и Win32» .
  5. Гаага, Джеймс (20 июля 2008 г.). «Килобайтные константы, простая и красивая идея, которая не прижилась» . Программирование в 21 веке .
  6. Эль-Халиль, Ракан; Керомити, Ангелос Д. (2004). «Hydan: сокрытие информации в двоичных файлах программы» (PDF) . В Лопесе, Хавьер; Цин, Сихан; Окамото, Эйдзи (ред.). Информационная и коммуникационная безопасность: 6-я Международная конференция, ICICS 2004, Малага, Испания, 27–29 октября 2004 г .: Материалы . Конспект лекций по информатике. 3269 . Springer . п. 190. ISBN  3-540-23563-9.