
- •Вставки и функции
- •Синтаксис
- •Размещение параметров
- •Выход, вход, clobbers, метки
- •Выходные параметры
- •Входные параметры
- •Перезаписываемые элементы (clobbers)
- •asm goto
- •Внешние метки
- •Определение поддержки AVX-инструкций
- •Практическое использование
- •Внутренние метки
- •Модификаторы параметров вставок
- •Условные команды
- •Условные команды

МИЭТ, СПИНТех, КАИ |
Ассемблерные вставки в программу на языке |
1 / 15 |
Ассемблерные вставки в программу на языке высокого уровня
Александра Игоревна Кононова
МИЭТ
24 октября 2021 г. актуальную версию можно найти на https://gitlab.com/illinc/arch-cs
Выход, вход, clobbers, метки |
Вставки и функции |
|
asm goto |
||
Синтаксис |
||
Практическое использование |
||
Размещение параметров |
||
Условные команды |
||
|

|
МИЭТ, СПИНТех, КАИ |
Ассемблерные вставки в программу на языке |
2 / 15 |
Вставки и функции |
|
|
|
1 |
Вставка фрагмент функции, написанный на ассемблере: |
|
|
|
кроссплатформенность; |
|
|
|
реализация на ассемблере только необходимых команд. |
|
|
2 |
Вставка не функция: |
|
|
указатель команды ip не меняется скачком при входе/выходе; нет команд вызова и возврата; нет пролога/эпилога;
нет передачи параметров через фиксированные места.
3 Описание функции во вставке =) неопределённое поведение!
4Вставка использует регистры, изменяемые по соглашению функцией (A; C; D везде, остальные различаются):
r-параметры (выходные и входные);
явно или неявно в коде (указать в перезаписываемых элементах); не должна менять неприкосновенные (их надо сохранять/восстанавливать вручную, если что).
Выход, вход, clobbers, метки |
Вставки и функции |
|
asm goto |
||
Синтаксис |
||
Практическое использование |
||
Размещение параметров |
||
Условные команды |
||
|

МИЭТ, СПИНТех, КАИ |
Ассемблерные вставки в программу на языке |
3 / 15 |
|
Синтаксис |
|
|
|
Стандарт C++: asm ( string-literal ); |
asm("movl %ecx, %eax"); |
||
GCC asm = __asm__, расширенный синтаксис: |
|
|
|
asm [volatile] ( |
|
|
|
"команды и директивы ассемблера" |
|
|
|
"как последовательная текстовая строка" |
|
|
: [<выходные параметры>] : [<входные параметры>] : [<перезаписываемые элементы>] );
asm [volatile] goto (
"команды и директивы ассемблера"
"как последовательная текстовая строка"
:: <входные параметры> : <перезаписываемые элементы> : <метки> );
Количество параметров output + input + goto 6 30, сквозная №-ция с 0
Выход, вход, clobbers, метки |
Вставки и функции |
|
asm goto |
||
Синтаксис |
||
Практическое использование |
||
Размещение параметров |
||
Условные команды |
||
|

МИЭТ, СПИНТех, КАИ |
Ассемблерные вставки в программу на языке |
4 / 15 |
Размещение параметров
Любое выражение ЯВУ в каждый момент времени хранится в памяти, регистре или вычисляется ¾на лету¿ компилятором =) параметры вставки:
либо копируются (в регистр):
1в регистре (r и др.) копирование в/из регистр, кроме перезаписываемых (clobbers):
reg 2 fA; C; D; : : :g n clobbers n прочие параметры того же вида
либо получают псевдонимы (тестовая подстановка):
2непосредственное значение (i и др.) подстановка выражения как непосредственного операнда;
3 память (m) подстановка выражения как операнда в памяти.
Размещение одного из видов по выбору компилятора (строка из нескольких ограничений rm, rmi или g).
Выход, вход, clobbers, метки |
Вставки и функции |
|
asm goto |
||
Синтаксис |
||
Практическое использование |
||
Размещение параметров |
||
Условные команды |
||
|