9.2.1. Преобразование функции asm() в ассемблерные инструкции
9.2.1. Преобразование функции asm() в ассемблерные инструкции
Компилятор gcc интерпретирует функцию asm() очень просто: он генерирует ассемблерные инструкции, обрабатывающие указанные входные и выходные операнды, после чего заменяет вызов функции заданной инструкцией. Никакой дополнительный анализ не выполняется.
Например, следующий фрагмент программы:
double foo, bar;
asm("mycool_asm %1, %0" : "=r" (bar) : "r" (foo));
будет преобразован в такую последовательность команд x86:
movl -8(%ebp),%edx
movl -4(%ebp),%ecx
#APP
mycool_asm %edx, %edx
#NO_APP
movl %edx,-16(%ebp)
movl %ecx,-12(%ebp)
Переменные foo и bar занимают по два слова в стеке в 32-разрядной архитектуре x86. Регистр ebp ссылается на данные, находящиеся в стеке.
Первые две команды копируют переменную foo в регистры edx и ecx, с которыми работает инструкция mycool_asm. Компилятор решил поместить результат в те же самые регистры. Последние две команды копируют результат в переменную bar. Выбор нужных регистров и копирование операндов осуществляются автоматически.
Более 800 000 книг и аудиокниг! 📚
Получи 2 месяца Литрес Подписки в подарок и наслаждайся неограниченным чтением
ПОЛУЧИТЬ ПОДАРОКЧитайте также
Инструкции XSLT
Инструкции XSLT В теле шаблона может присутствовать ряд элементов XSLT, называемых инструкциями:• <xsl:apply-imports>;• <xsl:apply-templates>;• <xsl:attribute>;• <xsl:call-template>;• <xsl:choose>;• <xsl:comment>;• <xsl:copy>;• <xsl:copy-of>;• <xsl:element>;• <xsl:fallback>;• <xsl:for-each>;• <xsl:if>;•
Краткие инструкции по использованию параметров
Краткие инструкции по использованию параметров Прежде чем мы приступим к изучению новых параметров в реестре Windows, необходимо ознакомиться с некоторыми правилами, которых мы будем придерживаться в этой книге. Прежде всего, для экономии места мы будем использовать
Инструкции и критерии адаптации
Инструкции и критерии адаптации СППО описывается на общем уровне, не всегда применимом для проекта. Для выбора жизненного цикла ПО из рекомендованных к использованию, а также для адаптации и уточнения СППО и выбранного жизненного цикла к конкретным характеристикам
Правило 24: Объявляйте функции, не являющиеся членами, когда преобразование типов должно быть применимо ко всем параметрам
Правило 24: Объявляйте функции, не являющиеся членами, когда преобразование типов должно быть применимо ко всем параметрам Во введении я отмечал, что в общем случае поддержка классом неявных преобразований типов – неудачная мысль. Но, конечно, из этого правила есть
9.3.1. Ассемблерные инструкции
9.3.1. Ассемблерные инструкции Первая секция содержит ассемблерные инструкции, заключенные в кавычки. В рассматриваемом примере таких инструкций две: fucomip и seta. Они разделены точкой с запятой. Если текущий вариант языка ассемблера не допускает такого способа разделения
5. Инструкции
5. Инструкции Мельчайшей независимой частью С++ программы является инструкция. Она соответствует предложению естественного языка, но завершается точкой с запятой (;), а не точкой. Выражение С++ (например, ival + 5) становится простой инструкцией, если после него поставить
5.1. Простые и составные инструкции
5.1. Простые и составные инструкции Простейшей формой является пустая инструкция. Вот как она выглядит:; // пустая инструкцияПустая инструкция используется там, где синтаксис С++ требует употребления инструкции, а логика программы – нет. Например, в следующем цикле while,
5.4 Инструкции и справки
5.4 Инструкции и справки Документация, требующаяся операторам, пользователям, руководителям и другим заинтересованным лицам для того, чтобы понимать и использовать программную
Инструкции
Инструкции ОО-нотация, разработанная в этой книге, императивна: вычисления специфицируются через команды (commands), также называемые инструкциями (instructions). (Мы избегаем обычно применимого термина оператор (предложение) (statement), поскольку в слове есть оттенок выражения,