Описание тега 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
. Иногда их называют псевдо-кодами операций.
Использование тегов
Используйте тег сборки для вопросов программирования на языке ассемблера на любом процессоре. Вы также должны использовать тег для вашего процессора или архитектуры набора команд ( 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.
Ресурсы
Ресурсы для начинающих
- Профессиональный язык ассемблера - Ричард Блюм
- Пошаговое руководство по языку ассемблера: программирование в Linux - Джефф Дантеманн
- Учебник по сборке - напишите свою собственную ОС
- Введение в язык ассемблера - Дандамуди
Учебники, руководства и справочные материалы по языку ассемблера
- Вики-страницы с тегами x86 содержат большую коллекцию ссылок, включая материалы для начинающих и справочную документацию.
- GNU C inline asm docs / guides / info (внизу этого ответа): как использовать встроенные asm GNU C, чтобы создавать эффективный код без большого количества ненужных инструкций.
- OSdev.org Практически все, что вам нужно для написания собственной ОС (игрушечной или другой). В основном x86, но есть упоминания об ARM.
- Сборка X86 / викиучебники
- Программирование с нуля (PDF)
- Учебник Пола Картера по сборке x86
- Ресурсы по оптимизации программного обеспечения от Agner Fog
- Быстрое введение в графы потоков данных: как анализировать цепочки зависимостей на предмет пропускной способности и задержки.