Vkládaný assembler

Z Wikipedie, otevřené encyklopedie
Skočit na: Navigace, Hledání

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ů.

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;
}