Здравствуйте, Erop, Вы писали:
Спасибо всем за советы буду стараться "обозреть все" но постепенно

. Хочу поделиться тем что удалось найти про вставки немного но может комуто поможет. Цитирую изразных источникво пока сам в кучу собрать информацию не могу еще не понял
Написание inline asm вставок в gcc
Ассемблерная вставка в с++ код, подобна использованию шаблона с аргументами
asm | __asm__ ("тело шаблона" [: [b]output operands] [: [b]input operands [/b][: [clobber]]]] ]);[/b]тело шаблона это одна или несколько ассемблерных команд
или (из другого источника)
asm("code" : "output" : "input": "registers");
если команды в теле шаблона должны использовать переменные или регистры из c окружения, то в теле шаблона нужно использовать операнды вида
%0,%1, ... все операнды должны быть проинициализированы или в
output operands или в
input operands или и там и там инициализируются они через запятую
Пример: (чужой и мне не очень понятный)
static __inline__ void
powerpmc250_set_bat(void)
{
unsigned long bat3u, bat3l;
static int mapping_set = 0;
if (!mapping_set)
{
__asm__ __volatile__(
" lis %0,0xf000\n \
ori %1,%0,0x002a\n \
ori %0,%0,0x1ffe\n \
mtspr 0x21e,%0\n \
mtspr 0x21f,%1\n \
isync\n \
sync "
: "=r" (bat3u), "=r" (bat3l));
mapping_set = 1;
}
return;
}
в этом примере используются два операнда %0 и %1 и их значения должны быть переданы в локальные переменные bat3u и bat3l соответственно.
порядок записи : "=r" (bat3u), "=r" (bat3l) соответствует порядку нумерации операндов
тоесть "=r" (bat3u) соответствует 0 операнду, а "=r" (bat3l) — первому.
з.ы. из за специфической инициализации немогу найти "новый" синтаксис некоторых команд..

(особенно для FPU)