1. Αυτός είναι ο κώδικας που γράφτηκε από έναν προγραμματιστή σε μια γλώσσα προγραμματισμού υψηλού επιπέδου (όπως η Python, η Java, η C ++ κ.λπ.). Αυτός ο κώδικας βασίζεται σε κείμενο και χρησιμοποιεί εντολές και σύνταξη με ανθρώπινο αναγνώσιμο.
2. Συλλογή (ή ερμηνεία): Αυτό είναι το κρίσιμο βήμα όπου ο κώδικας αναγνώσιμο από τον άνθρωπο μεταφράζεται σε κωδικό που κατανοούν μηχανικά. Υπάρχουν δύο κύριες προσεγγίσεις:
* Συλλογή: Ένας μεταγλωττιστής παίρνει ολόκληρο τον πηγαίο κώδικα και τον μεταφράζει σε ένα πλήρες σύνολο οδηγιών μηχανής (κωδικός αντικειμένου) ταυτόχρονα. Αυτός ο κωδικός αντικειμένου συνδέεται συχνά με άλλο κωδικό αντικειμένου (όπως οι βιβλιοθήκες) για να δημιουργήσει ένα εκτελέσιμο αρχείο. Αυτό το εκτελέσιμο είναι ουσιαστικά μια ακολουθία δυαδικών οδηγιών. Οι γλώσσες όπως το C ++ και το Java (πριν το βήμα JVM) χρησιμοποιούν συνήθως μεταγλωττιστές.
* Ερμηνεία: Ένας διερμηνέας μεταφράζει και εκτελεί τη γραμμή πηγαίου κώδικα ανά γραμμή, χωρίς να δημιουργεί ξεχωριστό εκτελέσιμο αρχείο. Γλώσσες όπως οι Python και JavaScript χρησιμοποιούν διερμηνείς. Ενώ δεν παράγουν άμεσα δυαδικό κώδικα με τον ίδιο τρόπο όπως ένας μεταγλωττιστής, ο ίδιος ο διερμηνέας είναι ένα πρόγραμμα γραμμένο σε μια καταρτισμένη γλώσσα και τελικά βασίζεται σε δυαδικές οδηγίες για να εκτελεστεί. Ο ερμηνευμένος κώδικας εξακολουθεί να εκτελείται χρησιμοποιώντας δυαδικές οδηγίες, αλλά η μετάφραση γίνεται δυναμικά, μία γραμμή κάθε φορά.
3. Γλώσσα συναρμολόγησης (μερικές φορές): Σε ορισμένες περιπτώσεις, ένας μεταγλωττιστής μπορεί να δημιουργήσει γλώσσα συναρμολόγησης ως ενδιάμεσο βήμα. Η γλώσσα συναρμολόγησης είναι μια γλώσσα προγραμματισμού χαμηλού επιπέδου που χρησιμοποιεί μνημονικά (σύντομες συντομογραφίες) για να αντιπροσωπεύει τις οδηγίες μηχανής. Στη συνέχεια, ένας συναρμολογητής μεταφράζει αυτόν τον κωδικό συναρμολόγησης σε κωδικό μηχανής (δυαδικό). Αυτό το βήμα είναι συχνά κρυμμένο από τον προγραμματιστή.
4. Κωδικός μηχανής (δυαδικός): Αυτό είναι το τελικό στάδιο. Ο κώδικας μηχανής αποτελείται από μια ακολουθία δυαδικών ψηφίων (0s και 1s). Κάθε εντολή αντιπροσωπεύεται από ένα μοναδικό δυαδικό μοτίβο που η CPU μπορεί να κατανοήσει και να εκτελέσει άμεσα. Αυτός ο δυαδικός κώδικας αντιπροσωπεύει πράγματα όπως:
* opcodes: Οδηγίες που λένε στην CPU ποια λειτουργία θα εκτελέσει (π.χ. προσθήκη, αφαίρεση, πρόσβαση μνήμης).
* τελεστές: Δεδομένα ή διευθύνσεις μνήμης στις οποίες λειτουργεί η εντολή.
Παράδειγμα (απλοποιημένο):
Ας πούμε ότι μια απλή οδηγία σε μια γλώσσα υψηλού επιπέδου είναι `x =y + 5;`. Μετά τη συλλογή, αυτό μπορεί να μεταφράσει (πολύ και ανάλογα με την αρχιτεκτονική) σε κάτι τέτοιο στο δυαδικό (αυτό είναι μια εξαιρετικά απλοποιημένη εικόνα και οι πραγματικές δυαδικές οδηγίες είναι πολύ πιο περίπλοκες):
* Φορτώστε την τιμή του `y` σε ένα μητρώο: `0001 1010 0000 0010` (υποθετική δυαδική διδασκαλία)
* Προσθήκη 5 στο μητρώο: `0010 0101 0000 0101` (υποθετική δυαδική διδασκαλία)
* Αποθηκεύστε το αποτέλεσμα στη θέση μνήμης του `x`: `0011 1100 0000 0011` (υποθετική δυαδική διδασκαλία)
Η συγκεκριμένη δυαδική αναπαράσταση εξαρτάται εξ ολοκλήρου από την αρχιτεκτονική της CPU (x86, ARM, κλπ.) Και ο μεταγλωττιστής/διερμηνέας που χρησιμοποιείται. Η διαδικασία είναι πολύπλοκη, αλλά η βασική ιδέα είναι ότι οι οδηγίες υψηλού επιπέδου χωρίζονται σε μια ακολουθία απλών δυαδικών οδηγιών που η CPU μπορεί να κατανοήσει άμεσα και να εκτελέσει.
Πνευματικά δικαιώματα © Γνώση Υπολογιστών Όλα τα δικαιώματα κατοχυρωμένα