Описание тега assembly

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

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

Языковой дизайн

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

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

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

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

Инструкции (инструкции) на языке ассемблера обычно очень просты, в отличие от инструкций на языке высокого уровня. Как правило, мнемоника - это символическое имя для одной исполняемой инструкции на машинном языке (код операции), и для каждой инструкции на машинном языке определена по крайней мере одна мнемоника кода операции. Каждая инструкция обычно состоит из операции или кода операции плюс ноль или более операндов.. Большинство инструкций относятся к одному значению или паре значений. Операнды могут быть непосредственными (значение, закодированное в самой инструкции), регистрами, указанными в инструкции или подразумеваемыми, или адресами данных, расположенными в другом месте в хранилище. Это определяется базовой архитектурой процессора: ассемблер просто отражает, как эта архитектура работает. Расширенная мнемоника часто используется для указания комбинации кода операции с конкретным операндом. Например, ассемблеры 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. Иногда их называют псевдо-кодами операций.

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

Используйте тег сборки для вопросов программирования на языке ассемблера на любом процессоре. Вы также должны использовать тег для вашего процессора или архитектуры набора команд ( arm, avr, mips, x86, x86-64 и т. Д.). Также подумайте о тегах для вашего ассемблера ( gas, masm, nasm и т. Д.).

Если ваш вопрос касается встроенной сборки на C или других языках программирования, см. Inline-assembly. По вопросам о сборках.NET используйте .net-assembly, а для.NET Common Intermediate Language используйте cil. Для Java ASM используйте тег java-bytecode-asm.

Ресурсы

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

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