Vkládaný assembler
Vkládaný assembler (také se používá anglické inline assembler) je v programování označení pro kód v jazyce symbolických instrukcí (asembleru) vložený mezi příkazy vyššího programovacího jazyka (např. C).
Nevýhodou vložení assembleru je obvykle ztráta nezávislosti kódu na platformě. Vkládání assembleru se provádí nejčastěji z jednoho z následujících důvodů.
- Optimalizace, například využití instrukcí SIMD.
- Přístup k instrukcím CPU (V/V porty, systémové volání), které překladač vyššího programovacího jazyka neumožňuje volat.
Následuje ukázka inline assembleru platformy x86 pro překladač GCC.
extern int errno;
int funcname(int arg1, int *arg2, int arg3)
{
int res;
__asm__ volatile(
"int $0x80" /* provedeme požadavek na operační systém */
: "=a" (res) /* jeho výsledek bude vrácen v registru eax ("a") */
"+b" (arg1), /* parametr arg1 předáme v registru ebx ("b") */
"+c" (arg2), /* parametr arg2 předáme v registru ecx ("c") */
"+d" (arg3) /* parametr arg3 předáme v registru edx ("d") */
: "a" (128) /* číslo volané služby předáme v registru eax ("a") */
: "memory", "cc"); /* informujeme překladač, co vše mohl náš kód změnit */
/* Operační systém vrací při chybě zápornou hodnotu;
* my nastavíme globální proměnnou errno podle vrácené hodnoty a vrátíme -1 */
if (-125 <= res && res < 0) {
errno = -res;
res = -1;
}
return res;
}