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

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

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

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

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

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

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

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

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

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

Ресурсы

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

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