Ορισμός γλώσσας Assembly

Τι είναι μια γλώσσα συναρμολόγησης;

Η γλώσσα assembly είναι ένας τύπος γλώσσας προγραμματισμού χαμηλού επιπέδου που προορίζεται να επικοινωνεί απευθείας με το υλικό ενός υπολογιστή.Σε αντίθεση με τη γλώσσα μηχανής, η οποία αποτελείται από δυαδικούς και δεκαεξαδικούς χαρακτήρες, οι γλώσσες συναρμολόγησης έχουν σχεδιαστεί για να είναι αναγνώσιμες από τον άνθρωπο.

Γλώσσες προγραμματισμού χαμηλού επιπέδου, όπως η γλώσσα συναρμολόγησης, είναι μια απαραίτητη γέφυρα μεταξύ του υποκείμενου υλικού ενός υπολογιστή και των γλωσσών προγραμματισμού υψηλότερου επιπέδου —όπως η Python ή η JavaScript— στις οποίες γράφονται τα σύγχρονα προγράμματα λογισμικού.

Βασικά Takeaways

  • Η γλώσσα assembly είναι ένας τύπος γλώσσας προγραμματισμού που μεταφράζει γλώσσες υψηλού επιπέδου σε γλώσσα μηχανής.
  • Είναι μια απαραίτητη γέφυρα μεταξύ των προγραμμάτων λογισμικού και των υποκείμενων πλατφορμών υλικού τους.
  • Η γλώσσα συναρμολόγησης βασίζεται στη σύνταξη της γλώσσας, τις ετικέτες, τους τελεστές και τις οδηγίες για τη μετατροπή του κώδικα σε χρησιμοποιήσιμη οδηγία μηχανής.
  • Η γλώσσα assembly μπορεί να περάσει από assemblers single-pass ή multi-pass, καθένα με συγκεκριμένες χρήσεις και πλεονεκτήματα.
  • Σήμερα, οι γλώσσες assemble σπάνια γράφονται απευθείας, αν και εξακολουθούν να χρησιμοποιούνται σε ορισμένες εξειδικευμένες εφαρμογές, όπως όταν οι απαιτήσεις απόδοσης είναι ιδιαίτερα υψηλές.

Πώς λειτουργούν οι γλώσσες Assembly

Βασικά, οι πιο βασικές εντολές που εκτελούνται από έναν υπολογιστή είναι δυαδικοί κώδικες, που αποτελούνται από μονάδες και μηδενικά.Αυτοί οι κωδικοί μεταφράζονται απευθείας στις καταστάσεις "on" και "off" του ηλεκτρισμού που κινείται μέσω των φυσικών κυκλωμάτων του υπολογιστή.Στην ουσία, αυτοί οι απλοί κώδικες αποτελούν τη βάση της «γλώσσας μηχανής», της πιο θεμελιώδους ποικιλίας γλώσσας προγραμματισμού.

Φυσικά, κανένας άνθρωπος δεν θα μπορούσε να κατασκευάσει σύγχρονα προγράμματα λογισμικού προγραμματίζοντας ρητά ένα και μηδενικό.Αντίθετα, οι ανθρώπινοι προγραμματιστές πρέπει να βασίζονται σε διάφορα επίπεδα αφαίρεσης που μπορούν να επιτρέψουν στον εαυτό τους να αρθρώσει τις εντολές τους σε μια μορφή που είναι πιο διαισθητική για τον άνθρωπο.

Συγκεκριμένα, οι σύγχρονοι προγραμματιστές εκδίδουν εντολές στις λεγόμενες «γλώσσες υψηλού επιπέδου», οι οποίες χρησιμοποιούν διαισθητική σύνταξη, όπως ολόκληρες αγγλικές λέξεις και προτάσεις, καθώς και λογικούς τελεστές όπως «and», «or» και «else» που είναι οικείο στην καθημερινή χρήση.

Τελικά, ωστόσο, αυτές οι εντολές υψηλού επιπέδου πρέπει να μεταφραστούν στη γλώσσα μηχανής.Αντί να το κάνουν χειροκίνητα, οι προγραμματιστές βασίζονται σε γλώσσες assembly, σκοπός των οποίων είναι η αυτόματη μετάφραση μεταξύ αυτών των γλωσσών υψηλού και χαμηλού επιπέδου.Οι πρώτες γλώσσες συναρμολόγησης αναπτύχθηκαν τη δεκαετία του 1940 και παρόλο που οι σύγχρονοι προγραμματιστές και οι σύγχρονοι επεξεργαστές φυσικών γλωσσών αφιερώνουν πολύ λίγο χρόνο στην ενασχόληση με τις γλώσσες συναρμολόγησης, ωστόσο παραμένουν απαραίτητες για τη συνολική λειτουργία ενός υπολογιστή.

Κατά τη διάρκεια των πρώτων ημερών των υπολογιστών, ο προγραμματισμός συστημάτων και ο προγραμματισμός εφαρμογών θα πραγματοποιούνταν και οι δύο εξ ολοκλήρου σε γλώσσα assembly.Χωρίς τις γλώσσες assembly, πολλοί σύγχρονοι υπολογιστές και γλώσσες υψηλότερου επιπέδου που χρησιμοποιούμε σήμερα δεν θα ήταν δυνατοί.

Συστατικά της γλώσσας Assembly

Σύνταξη

Κατά τη σύνταξη οποιουδήποτε κώδικα σε οποιαδήποτε γλώσσα προγράμματος, υπάρχει μια παρατηρήσιμη, συγκεκριμένη σειρά κανόνων που πρέπει να τηρούνται για να επιτρέπεται στον μεταγλωττιστή να εκτελέσει τον κώδικα χωρίς σφάλμα.Αυτοί οι κανόνες ορίζονται ως σύνταξη και περιέχουν κριτήρια όπως ο μέγιστος αριθμός επιτρεπόμενων χαρακτήρων, με ποιους χαρακτήρες πρέπει να ξεκινούν οι γραμμές κώδικα ή τι σημαίνουν ορισμένα σύμβολα "δηλαδή άνω και κάτω τελεία".

Επιγραφή

Μια ετικέτα είναι ένα σύμβολο που αντιπροσωπεύει τη διεύθυνση όπου αποθηκεύεται μια εντολή ή δεδομένα.Σκοπός του είναι να λειτουργεί ως προορισμός όταν αναφέρεται σε μια δήλωση.Οι ετικέτες μπορούν να χρησιμοποιηθούν οπουδήποτε μπορεί να χρησιμοποιηθεί μια διεύθυνση σε γλώσσες συναρμολόγησης.Μια συμβολική ετικέτα αποτελείται από ένα αναγνωριστικό ακολουθούμενο από άνω και κάτω τελεία, ενώ οι αριθμητικές ετικέτες αποτελούνται από ένα μόνο ψηφιακό που ακολουθείται από άνω και κάτω τελεία.

χειριστές

Οι τελεστές που αναφέρονται επίσης ως εντολές, είναι λογικές εκφράσεις που εμφανίζονται μετά το πεδίο ετικέτας.Επιπλέον, πρέπει να προηγείται τουλάχιστον ένας χαρακτήρας κενού διαστήματος.Οι χειριστές μπορεί να είναι είτε opcode είτε οδηγοί.Το Opcode αντιστοιχεί απευθείας στις οδηγίες του μηχανήματος και ο κωδικός λειτουργίας περιλαμβάνει οποιοδήποτε όνομα μητρώου που σχετίζεται με την εντολή.Εναλλακτικά, οι κώδικες λειτουργίας οδηγιών είναι οδηγίες που είναι γνωστές στον συναρμολογητή.

Διευθυντικός

Οι οδηγίες είναι οδηγίες προς τον συναρμολογητή που λένε ποιες ενέργειες πρέπει να πραγματοποιηθούν κατά τη διαδικασία συναρμολόγησης.Οι οδηγίες έχουν τη σημασία της δήλωσης ή της δέσμευσης μνήμης για μεταβλητές. Αυτές οι μεταβλητές μπορούν να ανακληθούν αργότερα σε διαδικασίες για να εκτελέσουν πιο δυναμικές λειτουργίες.Οι οδηγίες χρησιμοποιούνται επίσης για τη διάσπαση προγραμμάτων σε διαφορετικές ενότητες.

Μακροεντολή

Μια μακροεντολή γλώσσας συναρμολόγησης είναι μια μορφή παπουτσιού προτύπου που παρουσιάζει μια σειρά ή μοτίβο δηλώσεων.Αυτή η ακολουθία δηλώσεων γλώσσας συναρμολόγησης μπορεί να είναι κοινή σε πολλά διαφορετικά προγράμματα.Μια δυνατότητα μακροεντολής χρησιμοποιείται για την ερμηνεία ορισμών μακροεντολών, ενώ μια κλήση μακροεντολής εισάγεται στον πηγαίο κώδικα όπου ο "κανονικός" κώδικας συναρμολόγησης θα είχε πάει αντί για το σύνολο μακροεντολών των δηλώσεων.

Μνημονικός

Ένα μνημονικό είναι μια συντομογραφία για μια επέμβαση.Ένα μνημονικό εισάγεται στον κώδικα λειτουργίας για κάθε εντολή προγράμματος συναρμολόγησης για να καθορίσετε έναν συντομευμένο "opcode" που αντιπροσωπεύει ένα μεγαλύτερο, πλήρες σύνολο κωδικών.Για παράδειγμα, το μνημονικό "πολλαπλασιάστε με δύο" έχει ένα πλήρες σύνολο κώδικα που εκτελεί το μνημονικό.

Συναλλαγές υψηλών συχνοτήτων

Σήμερα, οι γλώσσες assembly παραμένουν αντικείμενο μελέτης από φοιτητές επιστήμης υπολογιστών, προκειμένου να τους βοηθήσουν να κατανοήσουν πώς σχετίζεται το σύγχρονο λογισμικό με τις υποκείμενες πλατφόρμες υλικού του.Σε ορισμένες περιπτώσεις, οι προγραμματιστές πρέπει να συνεχίσουν να γράφουν σε γλώσσες συναρμολόγησης, όπως όταν οι απαιτήσεις για απόδοση είναι ιδιαίτερα υψηλές ή όταν το εν λόγω υλικό δεν είναι συμβατό με οποιαδήποτε τρέχουσα γλώσσα υψηλού επιπέδου.

Ένα τέτοιο παράδειγμα που σχετίζεται με τη χρηματοδότηση είναι οι πλατφόρμες συναλλαγών υψηλής συχνότητας (HFT) που χρησιμοποιούνται από ορισμένες χρηματοπιστωτικές εταιρείες.Σε αυτήν την αγορά, η ταχύτητα και η ακρίβεια των συναλλαγών είναι υψίστης σημασίας προκειμένου οι στρατηγικές συναλλαγών HFT να αποδειχθούν κερδοφόρες.Ως εκ τούτου, για να κερδίσουν ένα πλεονέκτημα έναντι των ανταγωνιστών τους, ορισμένες εταιρείες HFT έχουν γράψει το λογισμικό συναλλαγών τους απευθείας σε γλώσσες συναρμολόγησης, καθιστώντας έτσι περιττό να περιμένουμε τις εντολές από μια γλώσσα υψηλότερου επιπέδου να μεταφραστούν σε γλώσσα μηχανής.

Πολλοί πιστεύουν ότι οι γλώσσες assembly έχουν τις πιο απότομες καμπύλες εκμάθησης και είναι οι πιο δύσκολες γλώσσες υπολογιστών για εκμάθηση.

Πλεονεκτήματα και μειονεκτήματα

Η γλώσσα συναρμολόγησης μπορεί συνήθως να εκτελεστεί πιο γρήγορα από τις γλώσσες υψηλού επιπέδου.Είναι σχετικά εύκολο να εισαγάγετε στοιχεία διαγραφής του κώδικα γλώσσας assembly και η γλώσσα assembly απαιτεί συνήθως λιγότερες οδηγίες για την ολοκλήρωση μιας εργασίας σε σύγκριση με άλλους τύπους γλωσσών.

Οι γλώσσες συναρμολόγησης χρησιμοποιούνται επίσης συχνά από προγραμματιστές που θέλουν μεγαλύτερο έλεγχο στους υπολογιστές τους, καθώς οι γλώσσες συναρμολόγησης σάς επιτρέπουν να χειρίζεστε απευθείας το υλικό σας.Λόγω της ταχύτητας και της σημασίας του, ορισμένα προγράμματα είναι ειδικά γραμμένα χρησιμοποιώντας γλώσσα assembly, καθώς ο κώδικας μπορεί συνήθως να παραμείνει μικρότερος.

Οι γλώσσες συναρμολόγησης τείνουν να έχουν αρκετά μειονεκτήματα.Τα μεγάλα προγράμματα γραμμένα με χρήση γλώσσας assembly συνήθως απαιτούν μεγαλύτερη υπολογιστική ισχύ και δεν μπορούν να εκτελεστούν σε μικρούς υπολογιστές.Μερικοί μπορεί να βρουν τη σύνταξη της γλώσσας assembly πιο δύσκολο να θυμηθούν και μπορεί να χρειαστεί λίγος περισσότερος χρόνος για να κωδικοποιηθεί χρησιμοποιώντας γλώσσα assembly καθώς είναι πιο περίπλοκη.Επιπλέον, η γλώσσα assembly συνήθως δεν είναι φορητή μεταξύ διαφορετικών μάρκων διαφορετικών υπολογιστών. παρόμοιο με τον τρόπο με τον οποίο χάνονται τα οφέλη των εργαζομένων κατά την αλλαγή εταιρείας, οι γλώσσες δεν μπορούν να μεταφραστούν απρόσκοπτα σε διαφορετικούς υπολογιστές.

Πλεονεκτήματα
  • Η εκτέλεση μπορεί να είναι πιο απλή σε σύγκριση με άλλες γλώσσες

  • Η εκτέλεση είναι συνήθως ταχύτερη σε σύγκριση με άλλες γλώσσες

  • Επιτρέπει τον άμεσο έλεγχο του υλικού

  • Ο κώδικας μπορεί να παραμείνει μικρότερος σε σύγκριση με άλλες γλώσσες

Μειονεκτήματα
  • Ο προγραμματισμός μπορεί να είναι πιο δύσκολος σε σύγκριση με γλώσσες υψηλού επιπέδου

  • Η σύνταξη των γλωσσών assembly είναι δύσκολη

  • Δεν είναι φορητό μεταξύ μηχανών

Τύποι Συναρμολογητών

Η γλώσσα συναρμολόγησης πρέπει να μεταφραστεί στη γλώσσα μηχανής χρησιμοποιώντας assembler.Υπάρχουν δύο κύριοι τύποι συναρμολογητών.

Ένας συναρμολογητής με ένα πέρασμα σαρώνει ένα πρόγραμμα μία φορά και δημιουργεί ένα ισοδύναμο δυαδικό πρόγραμμα.Αυτός ο τύπος assembler επικυρώνει τον κώδικα γλώσσας συγκρότησης αναζητώντας τον κώδικα σε έναν πίνακα μνημονικού κώδικα.Ένας συναρμολογητής με ένα πέρασμα είναι συχνά ταχύτερος από έναν συναρμολογητή πολλαπλών διελεύσεων και συνήθως δεν χρειάζεται να κατασκευαστεί κανένας ενδιάμεσος κώδικας.

Ένας συναρμολογητής πολλαπλών περασμάτων σημαίνει ότι ο συναρμολογητής χρησιμοποιεί περισσότερα από ένα περάσματα.Οι συναρμολογητές πολλαπλών περασμάτων δημιουργούν έναν πίνακα με κάθε σύμβολο και κάθε τιμή τους στο πρώτο πέρασμα και στη συνέχεια χρησιμοποιούν τον πίνακα σε μελλοντικά περάσματα για να δημιουργήσουν νέο κώδικα.Κάθε ξεχωριστό πάσο συνήθως χειρίζεται μια διαφορετική συγκεκριμένη εργασία.Αν και συνήθως πιο αργά, οι συναρμολογητές πολλαπλών περασμάτων με αρθρωτές δομές μπορούν συχνά να επαναχρησιμοποιηθούν για διαφορετικά μηχανήματα.

Παράδειγμα κώδικα γλώσσας Assembly

Παρακάτω είναι ένα παράδειγμα κώδικα γλώσσας συναρμολόγησης Netwide Assembler (NASM).

Παράδειγμα κώδικα γλώσσας Assembly.

Πανεπιστήμιο Loyola Marymount

Σε αυτό το παράδειγμα, η εντολή SYSCALL προς το τέλος του κώδικα ενεργοποιεί το τμήμα της μνήμης όπου είναι αποθηκευμένες οι υπηρεσίες του λειτουργικού συστήματος.Στη συνέχεια, ο κωδικός RAX χρησιμοποιείται για να καλέσει να γραφτεί ο κώδικας και στη συνέχεια RDI για έξοδο.Η συνάρτηση SYSCALL χρησιμοποιείται δύο φορές για την κλήση του λειτουργικού συστήματος καθώς και για να υποδείξει στο σύστημα πότε ο κωδικός έχει ολοκληρωθεί και είναι ώρα για έξοδο.

Τι είναι ένα παράδειγμα μιας γλώσσας συναρμολόγησης;

Οι πιο συχνά χρησιμοποιούμενες γλώσσες συναρμολόγησης περιλαμβάνουν τις ARM, MIPS και x86.

Είναι η C++ μια γλώσσα Assembly;

Η C++ δεν αποτελείται από κώδικα συναρμολόγησης.Η υπολογιστική γλώσσα C++ αποτελείται από κώδικα C++ τον οποίο ένας μεταγλωττιστής μεταφράζει σε έναν εκτελέσιμο κώδικα μηχανής.

Είναι η Python μια γλώσσα Assembly;

Η Python είναι πιο προηγμένη από τις γλώσσες assembly.Οι γλώσσες συναρμολόγησης θεωρούνται γλώσσα χαμηλού επιπέδου, ενώ οι γλώσσες υψηλού επιπέδου όπως η C, η Java ή η Python χρησιμοποιούν 0 και 1 αντί για αριθμούς, σύμβολα και συντμήσεις.

Πώς χρησιμοποιούνται σήμερα οι γλώσσες Assembly;

Αν και θεωρούνται γλώσσες χαμηλότερου επιπέδου σε σύγκριση με πιο προηγμένες γλώσσες, οι γλώσσες assembly εξακολουθούν να χρησιμοποιούνται.Η γλώσσα συναρμολόγησης χρησιμοποιείται για απευθείας χειρισμό υλικού, πρόσβαση σε εξειδικευμένες οδηγίες επεξεργαστή ή αξιολόγηση κρίσιμων ζητημάτων απόδοσης.Αυτές οι γλώσσες χρησιμοποιούνται επίσης για να αξιοποιήσουν το πλεονέκτημα ταχύτητας έναντι των γλωσσών υψηλού επιπέδου για δραστηριότητες ευαίσθητες στον χρόνο, όπως οι συναλλαγές υψηλής συχνότητας.

Η κατώτατη γραμμή

Η γλώσσα συναρμολόγησης είναι κώδικας χαμηλού επιπέδου που βασίζεται σε μια ισχυρή σχέση μεταξύ των εντολών που εισάγονται χρησιμοποιώντας τη γλώσσα κωδικοποίησης και του τρόπου με τον οποίο μια μηχανή ερμηνεύει τις οδηγίες κώδικα.Ο κώδικας μετατρέπεται σε εκτελέσιμες ενέργειες χρησιμοποιώντας έναν assembler που μετατρέπει την είσοδο σε αναγνωρίσιμες οδηγίες για το μηχάνημα.Αν και επικρατούσε στις πρώτες μέρες της πληροφορικής, πολλά μεγαλύτερα συστήματα χρησιμοποιούν γλώσσες υψηλότερου επιπέδου.