Różnica między kompilatorem a asemblerem
Zawartość
Kompilator i asembler odgrywają ważną rolę w wykonywaniu programu. Niektóre kompilatory bezpośrednio generują kod wykonywalny zamiast kodu asemblera. Kompilator pobiera wstępnie przetworzony kod źródłowy i tłumaczy go na kod asemblera. Asembler pobiera kod asemblera z kompilatora i tłumaczy go na relokowalny kod maszynowy. W tym artykule omówiłem różnice między kompilatorem a asemblerem za pomocą poniższej tabeli porównawczej, wystarczy spojrzeć.
- Wykres porównania
- Definicja
- Kluczowe różnice
- Wniosek
Wykres porównania
Podstawa do porównania | Kompilator | Monter |
---|---|---|
Podstawowy | Generuje kod języka asemblera lub bezpośrednio kod wykonywalny. | Generuje relokowalny kod maszynowy. |
Wkład | Wstępnie przetworzony kod źródłowy. | Kod języka asemblera. |
Fazy / karnety | Fazy kompilacji to analizator leksykalny, analizator składni, analizator semantyczny, generowanie kodu pośredniego, optymalizacja kodu, generowanie kodu. | Asembler wykonuje dwa przejścia przez dane wejście. |
Wydajność | Generowany przez kompilator kod asemblera jest mnemoniczną wersją kodu maszynowego. | Relokowalny kod maszynowy generowany przez asembler jest reprezentowany przez kod binarny. |
Definicja kompilatora
The kompilator to program komputerowy, który czyta program napisany w języku źródłowym, tłumaczy go na równoważny język asemblera i przekazuje kod języka asemblera do Monter. Podczas tłumaczenia kodu źródłowego na kod asemblera kompilator zgłasza również błąd w kodzie źródłowym do jego użytkownika.
Kompilatory są również klasyfikowane jako single-pass, multi-pass, load-and-go, debugowanie i optymalizacja. Klasyfikacja odbywa się na podstawie tego, jaką funkcję wykonuje kompilator i jak została zbudowana. Pomimo tych zawiłości podstawowe zadanie kompilatora pozostaje takie samo.
Kompilacja odbywa się w dwóch częściach, część analityczna i część syntezy. The część analityczna dzieli kod źródłowy na części składowe i tworzy pośrednią reprezentację kodu źródłowego. The część syntezy tworzy kod docelowy z reprezentacji pośredniej.
Kompilacja odbywa się w następujących fazach:
Analizator leksykalny, analizator składni, analizator semantyczny, generator kodu pośredniego, optymalizator kodu, generator kodu, tablica symboli i moduł obsługi błędów.
- The analizator leksykalny odczytuje znaki kodu źródłowego i grupuje je w strumienie tokenów. Każdy token reprezentuje logiczną sekwencję znaków takich jak słowo kluczowe, identyfikatory, operatory. Sekwencja znaków tworząca token nazywa się leksem.
- The analizator składni analizuje token uzyskany z analizatora leksykalnego i grupuje tokeny w a struktura hierarchiczna.
- The analizator semantyczny sprawdza kod źródłowy błąd semantyczny.
- Pośredni generator kodów generuje reprezentacja pośrednia kodu źródłowego
- The Optymalizator kodu optymalizuje kod pośredni do szybciej działającego kodu maszynowego.
- The generator kodów w końcu generuje kod docelowy, który jest relokowalny kod maszynowy lub kod zestawu.
- The tablica symboli to struktura danych, która zawiera zapis każdego identyfikatora w kodzie źródłowym.
- Obsługa błędów wykrywa błąd w każdej fazie i obsługuje te błędy.
Definicja asemblera
Niektóre kompilatory wykonują zadanie asemblera i bezpośrednio generują relokowalny kod maszynowy zamiast kodu asemblera, który jest następnie przekazywany bezpośrednio do linkera / modułu ładującego. The monter pobiera jako dane wejściowe kod asemblera wygenerowany przez kompilator i tłumaczy go na relokowalny kod maszynowy.
Zobaczmy, czym różni się kod maszynowy od kodu asemblera. Kod zestawu jest mnemoniczny wersja kodu maszynowego. Oznacza to, że kod zestawu używa nazw do reprezentowania operacji, a nawet nadaje nazwy adresom pamięci. Z drugiej strony kod maszynowy wykorzystuje kody binarne do reprezentacji operacji i adresów pamięci.Działa nawet najprostsza forma asemblera dwa przejścia nad wejściem. The pierwsze przejście wykrywa wszystkie identyfikatory w kodzie zestawu, który oznacza miejsce przechowywania i przechowywać je w tablica symboli (inne niż tablica symboli kompilatorów). The miejsce przechowywania jest przypisane do identyfikatora napotkanego w pierwszym przebiegu.
w drugie przejście, dane wejściowe są skanowane ponownie i tym razem kod operacji są przetłumaczony w sekwencja bitów reprezentujący tę operację w kodzie maszynowym. Drugie przejście również tłumaczy identyfikatory do adresy zdefiniowane w tablicy symboli. W ten sposób drugie przejście generuje relokowalny kod maszynowy.
- Kluczową różnicą między kompilatorem a asemblerem jest to, że kompilator generuje kod asemblera, a niektóre kompilatory mogą również bezpośrednio generować kod wykonywalny, podczas gdy monter generuje relokowalny kod maszynowy.
- Kompilator pobiera jako dane wejściowe wstępnie przetworzony kod wygenerowane przez preprocesora. Z drugiej strony asembler bierze kod zestawu jako dane wejściowe.
- Kompilacja odbywa się w dwóch etapach faza analizy i faza syntezy. W fazie analizy dane wejściowe przechodzą analizator leksykalny, analizator składni, analizator semantyczny podczas gdy analiza syntezy odbywa się za pośrednictwem generator kodu pośredniego, optymalizator kodu, generator kodu. Z drugiej strony asembler przekazuje dane wejściowe dwie fazy. Pierwsza faza wykrywa identyfikatory i adresy przydziału do nich w drugiej fazie kod zestawu jest tłumaczony na kod binarny.
- Kod zestawu generowany przez kompilator to wersja mnemoniczna kodu maszynowego. Jednak relokowalny kod maszynowy generowany przez asembler to binarny kod relokowalny.
Wniosek:
Asembler może nie być wymagany, ponieważ niektóre kompilatory bezpośrednio generują kod wykonywalny. Jeśli używany jest asembler, wymaga on linkera do połączenia wszystkich wbudowanych bibliotek z funkcjami bibliotecznymi używanymi w kodzie źródłowym.