Tříadresní kód

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

Tříadresní kód (často označovaný jako tříadresný kód nebo tříadresový kód) označuje v informatice formu mezijazyka, používanou překladačem jako pomůcku pro optimalizaci kódu. Každý příkaz v tříadresním kódu je zapsán pomocí uspořádané čtveřice: operátor, operand1, operand2 a výsledek.

Zápis[editovat | editovat zdroj]

Každý výrok pak má obecný zápis:

\text{vysledek} := \text{operand}_1 \, \operatorname{operator} \, \text{operand}_2\,

jako například:

x := y \, \operatorname{op} \, z\,

kde x, y a z jsou proměnné, konstanty nebo dočasné proměnné generované překladačem. Symbol op představuje libovolný operátor, například aritmetický součet.

Výrazy, které obsahují více než jednu klíčovou operaci, například:

p := x + y \times z\,

nejsou reprezentované v tříadresním kódu jako jeden příkaz. Místo toho se rozloží na ekvivalentní řadu příkazů jako například:

t_1 := y \times z\,

p := x + t_1\,

Pojem tříadresní kód se používá i tehdy, kdy některé příkazy obsahují více (nebo naopak méně) než dva operandy. Klíčová vlastnost tříadresního kódu je, že každý příkaz obsahuje právě jednu operaci, a že zdroj i cíl se vztahují k jakémukoliv dostupnému registru.

Zdokonalením tříadresního kódu je tzv. SSA forma.

Příklad[editovat | editovat zdroj]

 int main(void)
 {
     int i;
     int b[10];
     for (i = 0; i < 10; ++i) {
         b[i] = i*i; 
     }
 }

Výše uvedený program jazyka C, přeložený do tříadresního kódu, by mohl vypadat následovně:

      i := 0                  ; přiřazení
L1:   if i >= 10 goto L2      ; podmíněný skok
      t0 := i*i
      t1 := &b                ; adresa operace
      t2 := t1 + i            ; přiřazení hodnoty t2 k adrese b[i] 
      *t2 := t0               ; uložení operace prostřednictvím ukazatele
      i := i + 1
      goto L1
L2:

Související články[editovat | editovat zdroj]

Reference[editovat | editovat zdroj]

V tomto článku byl použit překlad textu z článku Three_address_code na anglické Wikipedii.

Externí odkazy[editovat | editovat zdroj]