Trzy kod adresowy

W informatyce , kod trzy adres ( TAC lub 3AC ) jest rodzajem języka pośredniego stosowane przez kompilatory jak Clang - LLVM . Każda instrukcja TAC ma co najwyżej trzy operandy i jest zwykle połączeniem przypisania i operatora binarnego. Na przykład t1: = t2 + t3. Nazwa wywodzi się z użycia trzech operandów w tych instrukcjach, chociaż mogą wystąpić instrukcje z mniejszą liczbą operandów.

Ponieważ kod trójadresowy jest używany jako język pośredni w kompilatorach, jest mało prawdopodobne, aby argumenty były konkretnymi adresami pamięci lub rejestrami procesora , ale raczej adresami symbolicznymi, które zostaną przetłumaczone na adresy rzeczywiste podczas ich przydzielania . Nie jest również rzadkością, że nazwy operandów są numerowane sekwencyjnie, ponieważ kod z trzema adresami jest zwykle generowany przez kompilator.

Przykłady

W trzech kodach adresowych byłoby to podzielone na kilka oddzielnych instrukcji. Te instrukcje są łatwiejsze do przetłumaczenia na język asemblera. Łatwiej jest również wykryć typowe wyrażenia podrzędne, aby skrócić kod. W poniższym przykładzie obliczenie składa się z kilku mniejszych:

# Oblicz rozwiązanie [[Równanie kwadratowe]]. x = (-b + sqrt (b ^ 2 - 4 * a * c)) / (2 * a) t1: = b * b t2: = 4 * a t3: = t2 * c t4: = t1 - t3 t5: = sqrt (t4) t6: = 0 - b t7: = t5 + t6 t8: = 2 * a t9: = t7 / t8 x: = t9

Trzy kody adresowe mogą mieć skoki warunkowe i bezwarunkowe oraz metody dostępu do pamięci. Może również mieć metody wywoływania funkcji. W ten sposób trzy kody adresowe mogą być przydatne w analizie przepływu sterowania. W poniższym przykładzie typu C pętla przechowuje kwadraty liczb od 0 do 9:

... for (i = 0; i < 10; ++i) { b[i] = i*i; } ... t1: = 0; Inicjalizacja i L1: jeśli t1> = 10 goto L2; Skok warunkowy t2: = t1 * t1; Obliczenie kwadratu i t3: = t1 * 4; Definicja adresu t4: = b + t3; Adres do przechowywania i do kwadratu * t4: = t2; Przechowywanie informacji za pomocą wskaźnika t1: = t1 + 1; Przyrost i goto L1; Powtórz pętlę L2:

Zobacz też

Uwagi i odniesienia

  1. Aho, Alfred V. (Sethi, Ravi., Ullman, Jeffrey D., 1942-), Kompilatory, zasady, techniki i narzędzia , Reading, Mass., Addison-Wesley Pub. Współ,1986, 466  str. ( ISBN  0201100886 , OCLC  12285707 , czytaj online )