Вопросы программирования на ассемблере (asm). ОБЯЗАТЕЛЬНО ТАКЖЕ пометьте процессором и / или набором команд, который вы используете, а также ассемблером. ПРЕДУПРЕЖДЕНИЕ. Вместо сборок .NET используйте тег [.net-assembly]. Для Java ASM используйте тег [java-bytecode-asm].

Assembly - это семейство языков программирования очень низкого уровня, чуть выше машинного кода. В сборке каждый оператор соответствует одной инструкции машинного кода. Эти инструкции представлены в виде мнемоники на данном языке ассемблера и преобразуются в исполняемый машинный код с помощью служебной программы, называемой ассемблером ; процесс преобразования называется сборкой или сборкой кода.

Конструкция языка

Основные элементы

Существует большое разнообразие в том, как ассемблеры классифицируют операторы и в номенклатуре, которую они используют. В частности, некоторые описывают что-либо кроме машинной мнемоники или расширенной мнемоники как псевдооперацию (псевдооперацию). Типичный язык ассемблера состоит из трех типов инструкций команд, которые используются для определения операций программы:

  • Opcode мнемоника
  • Разделы данных
  • Директивы ассемблера

Мнемоника кода операции и расширенная мнемоника

Инструкции (операторы) на языке ассемблера, как правило, очень просты, в отличие от языков высокого уровня . [+1121]. Как правило, мнемоника - это символическое имя для одной исполняемой инструкции машинного языка (код операции), и для каждой инструкции машинного языка определена по крайней мере одна мнемоника кода операции. Каждая инструкция обычно состоит из операции или кода операции плюс ноль или более операндов . Большинство инструкций относятся к одному значению или паре значений. Операнды могут быть непосредственными (значение, закодированное в самой инструкции), регистры, указанные в инструкции или подразумеваемые, или адреса данных, расположенные в другом месте в хранилище. Это определяется базовой архитектурой процессора: ассемблер просто отражает, как работает эта архитектура. Расширенная мнемоника часто используется для указания комбинации кода операции с конкретным операндом. Например, ассемблеры System / 360 используют B в качестве расширенной мнемоники для BC с маской 15 и NOP для BC с маской 0.

Расширенная мнемоника часто используется для поддержки специального использования инструкций, часто в целях, не очевидных из названия инструкции. Например, многие процессоры не имеют явной инструкции NOP, но имеют инструкции, которые можно использовать для этой цели. В процессорах 8086 инструкция xchg ax,ax используется для nop, причем nop является псевдо-кодом для кодирования инструкции xchg ax,ax. Некоторые дизассемблеры распознают это и будут декодировать инструкцию xchg ax,ax как nop. Аналогично, ассемблеры IBM для System / 360 и System / 370 используют расширенную мнемонику NOP и NOPR для BC и BCR с нулевыми масками. Для архитектуры SPARC они известны как синтетические инструкции

Некоторые ассемблеры также поддерживают простые встроенные макрокоманды, которые генерируют две или более машинных инструкции. Например, с некоторыми ассемблерами Z80 команда ld hl,bc распознается как генерирующая ld l,c, за которой следует ld h,b. Их иногда называют псевдо-кодами.

Использование тегов

Используйте тег для вопросов программирования на ассемблере на любом процессоре. Вам также следует использовать тег для архитектуры вашего процессора или набора команд (, , , , и т. Д.). Также рассмотрим тег для вашего ассемблера (, , , etcetera).

Если ваш вопрос касается встроенной сборки на C или других языках программирования, см. . Для вопросов о сборках .NET используйте . Для Java ASM используйте тег .

Ресурсы

Ресурсы для начинающих

Учебные пособия, руководства и справочные материалы по языку ассемблера