Вопросы программирования на ассемблере (asm). ОБЯЗАТЕЛЬНО ТАКЖЕ пометьте процессором и / или набором команд, который вы используете, а также ассемблером. ПРЕДУПРЕЖДЕНИЕ. Вместо сборок .NET используйте тег [.net-assembly]. Для Java ASM используйте тег [java-bytecode-asm].
Assembly - это семейство языков программирования очень низкого уровня, чуть выше машинного кода. В сборке каждый оператор соответствует одной инструкции машинного кода. Эти инструкции представлены в виде мнемоники на данном языке ассемблера и преобразуются в исполняемый машинный код с помощью служебной программы, называемой ассемблером ; процесс преобразования называется сборкой или сборкой кода.
Основные элементы
Существует большое разнообразие в том, как ассемблеры классифицируют операторы и в номенклатуре, которую они используют. В частности, некоторые описывают что-либо кроме машинной мнемоники или расширенной мнемоники как псевдооперацию (псевдооперацию). Типичный язык ассемблера состоит из трех типов инструкций команд, которые используются для определения операций программы:
Мнемоника кода операции и расширенная мнемоника
Инструкции (операторы) на языке ассемблера, как правило, очень просты, в отличие от языков высокого уровня . [+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
. Их иногда называют псевдо-кодами.
Используйте тег сборки для вопросов программирования на ассемблере на любом процессоре. Вам также следует использовать тег для архитектуры вашего процессора или набора команд ( arm , avr , mips , x86 , x86] -64 и т. Д.). Также рассмотрим тег для вашего ассемблера ( gas , masm , nasm , etcetera).
Если ваш вопрос касается встроенной сборки на C или других языках программирования, см. inline-assembly . Для вопросов о сборках .NET используйте .net- вместо сборки . Для Java ASM используйте тег java-bytecode-asm .
Ресурсы для начинающих
Учебные пособия, руководства и справочные материалы по языку ассемблера