Różnica między kompilatorem a asemblerem

Autor: Laura McKinney
Data Utworzenia: 1 Kwiecień 2021
Data Aktualizacji: 10 Móc 2024
Anonim
Różnica między kompilatorem a asemblerem - Technologia
Różnica między kompilatorem a asemblerem - Technologia

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

  1. Wykres porównania
  2. Definicja
  3. Kluczowe różnice
  4. Wniosek

Wykres porównania

Podstawa do porównaniaKompilator Monter
PodstawowyGeneruje kod języka asemblera lub bezpośrednio kod wykonywalny.Generuje relokowalny kod maszynowy.
WkładWstępnie przetworzony kod źródłowy.Kod języka asemblera.
Fazy ​​/ karnetyFazy ​​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 operacjiprzetł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.

  1. 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.
  2. Kompilator pobiera jako dane wejściowe wstępnie przetworzony kod wygenerowane przez preprocesora. Z drugiej strony asembler bierze kod zestawu jako dane wejściowe.
  3. 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.
  4. 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.