Skirtumas tarp kompiliatoriaus ir montuotojo

Autorius: Laura McKinney
Kūrybos Data: 1 Balandis 2021
Atnaujinimo Data: 10 Gegužė 2024
Anonim
Fun with Music and Programming by Connor Harris and Stephen Krewson
Video.: Fun with Music and Programming by Connor Harris and Stephen Krewson

Turinys


Kompiliatorius ir montuotojas vaidina svarbų vaidmenį vykdant programą. Kai kurie kompiliatoriai tiesiogiai sukuria vykdomąjį kodą, o ne surinkimo kodą. Kompiliatorius paima iš anksto apdorotą šaltinio kodą ir išverčia jį į surinkimo kodą. Surinkėjas paima surinkimo kodą iš kompiliatoriaus ir išverčia jį į perkeliamą mašinos kodą. Šiame straipsnyje aš aptariau skirtumus tarp kompiliatoriaus ir surinkėjo naudojant palyginimo lentelę, parodytą žemiau, tiesiog pasižiūrėkite.

  1. Palyginimo diagrama
  2. Apibrėžimas
  3. Pagrindiniai skirtumai
  4. Išvada

Palyginimo diagrama

Palyginimo pagrindasSudarytojas Montuotojas
PagrindinisGeneruojamas surinkimo kalbos kodas arba tiesiogiai vykdomasis kodas.Sugeneruojamas perkeliamas mašinos kodas.
ĮvestisIš anksto apdorotas šaltinio kodas.Asamblėjos kalbos kodas.
Fazės / praeinaKompiliavimo fazės yra leksinis analizatorius, sintaksės analizatorius, semantinis analizatorius, tarpinis kodo generavimas, kodo optimizavimas, kodo generavimas.Surinkėjas atlieka du perdavimus per nurodytą įvestį.
IšėjimasKompiliatoriaus sukurtas surinkimo kodas yra mnemoninė mašinos kodo versija.Montuotojo sugeneruotas perkeliamas mašinos kodas pavaizduotas dvejetainiu kodu.


Kompiliatoriaus apibrėžimas

sudarytojas yra kompiuterinė programa, kuri skaito programą, parašytą originalo kalba, paverčia ją ekvivalentu susirinkimo kalba ir persiunčia surinkimo kalbos kodą Montuotojas. Šaltinio kodo vertimą į surinkimo kodą kompiliatorius taip pat praneša apie klaida šaltinyje jo vartotojui.

Kompiliatoriai taip pat klasifikuojami kaip vieno leidimo, kelių leidimų, „pakrovimo ir važiavimo“ derinimas ir optimizavimas. Klasifikuojama pagal tai, kokią funkciją atlieka kompiliatorius ir kaip ji buvo sukonstruota. Nepaisant šių sudėtingumų, pagrindinė kompiliatoriaus užduotis išlieka ta pati.

Kompiliacija atliekama iš dviejų dalių, analizės dalis ir sintezės dalis. analizės dalis padalija šaltinio kodą į sudedamąsias dalis ir sudaro tarpinį šaltinio kodo atvaizdą. sintezės dalis suformuoja tikslinį kodą iš tarpinio atvaizdo.


Kompiliacija atliekama šiomis fazėmis:

Leksinis analizatorius, sintaksės analizatorius, semantinis analizatorius, tarpinis kodų generatorius, kodo optimizatorius, kodų generatorius, simbolių lentelė ir klaidų tvarkytuvas.

  • leksinis analizatorius nuskaito šaltinio kodo simbolius ir sugrupuoja juos į žetonų srautai. Kiekvienas ženklas žymi loginę simbolių seką, pvz raktinis žodis, identifikatoriai, operatoriai. Simbolių seka, sudaranti žetoną, vadinama lexeme.
  • sintaksės analizatorius analizuoja žetoną, gautą iš leksinio analizatoriaus, ir grupuoja žetonus į a hierarchinė struktūra.
  • semantinis analizatorius tikrina, ar nėra kodo semantinė klaida.
  • Tarpinis kodų generatorius sukuria tarpinis atstovavimas šaltinio kodo
  • kodo optimizavimo priemonė optimizuoja tarpinį kodą į greitesnį mašinos kodą.
  • kodų generatorius galiausiai sugeneruoja tikslinį kodą, kuris yra perkeliamas mašinos kodas arba surinkimo kodas.
  • simbolių lentelė yra duomenų struktūra, kurioje yra kiekvieno šaltinio kodo identifikatoriaus įrašas.
  • Klaidų tvarkytojas nustato klaidą kiekvienoje fazėje ir tvarko tas klaidas.

Montuotojo apibrėžimas

Kai kurie kompiliatoriai vykdo surinkėjo užduotį ir tiesiogiai sukuria perkeliamą mašinos kodą, o ne surinkimo kodą, kuris toliau tiesiogiai perduodamas sujungėjui / krovėjui. montuotojas įvestas kompiliatoriaus sugeneruotas surinkimo kodas ir paverčiamas į perkeliamas mašinos kodas.

Pažiūrėkime, kaip mašinos kodas skiriasi nuo surinkimo kodo. Surinkimo kodas yra mnemoninis mašinos kodo versija. Tai reiškia, kad surinkimo kodas operacijų vaizdavimui naudoja vardus ir netgi suteikia vardus atminties adresams. Kita vertus, mašinos kodas naudoja dvejetainiai kodai operacijų ir atminties adresų vaizdavimui.

Atlieka net paprasčiausios formos montuotojas du praėjimai per įvestį. pirmasis leidimas aptinka visus identifikatoriai surinkimo kode, kuris žymi saugojimo vietą, ir saugokite juos simbolių lentelė (išskyrus kompiliatorių simbolių lentelę). priskirta saugojimo vieta į identifikatorių, kuris aptinkamas per pirmąjį praėjimą.

Viduje antras praėjimas, įvestis nuskaityta dar kartą, o šį kartą operacijos kodas yra išverstas į a bitų seka tą operaciją vaizduojant mašinos kode. Antrasis leidimas taip pat verčiamas identifikatoriai į adresus apibrėžta simbolių lentelėje. Taigi antrasis leidimas generuoja perkeliamas mašinos kodas.

  1. Pagrindinis skirtumas tarp sudarytojo ir surinkėjo yra tas, kad sudarytojas generuoja surinkimo kodą, o kai kurie kompiliatoriai taip pat gali tiesiogiai generuoti vykdomąjį kodą, tuo tarpu montuotojas generuoja perkeliamą mašinos kodą.
  2. Kompiliatorius įveda iš anksto apdorotas kodas sukurtas pirminio procesoriaus. Kita vertus, surinkėjas imasi surinkimo kodas kaip įvestis.
  3. Kompiliacija vyksta dviem etapais analizės etapas ir sintezės fazė. Analizės etape įvestis vyksta leksinis analizatorius, sintaksės analizatorius, semantinis analizatorius tuo tarpu sintezės analizė vyksta per tarpinis kodų generatorius, kodų optimizatorius, kodų generatorius. Kita vertus, surinkėjas perduoda įvestį dvi fazės. Pirmoje fazėje nustatomi identifikatoriai ir paskirstomi adresai jiems, antroje fazėje surinkimo kodas išverstas į dvejetainį kodą.
  4. Kompiliatoriaus sukurtas surinkimo kodas yra a mnemoninė versija mašinos kodo. Tačiau montuotojo sugeneruotas perkeltinas mašinos kodas yra a dvejetainis perkeliamas kodas.

Išvada:

Surinkėjo gali neprireikti, nes kai kurie kompiliatoriai tiesiogiai generuoja vykdomąjį kodą. Jei naudojamas surinkėjas, reikia susieti visas integruotas bibliotekas su šaltinio kode naudojamomis bibliotekų funkcijomis.