Προγραμματισμός

Γνώση Υπολογιστών >> Προγραμματισμός >  >> Γλώσσες Προγραμματισμού Υπολογιστών

Ποιος είναι ο σκοπός και η λειτουργικότητα μιας γλώσσας συναρμολόγησης;

Σκοπός και λειτουργικότητα της γλώσσας συναρμολόγησης

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

Σκοπός:

* Γέφυρα το χάσμα μεταξύ ανθρώπινων προγραμματιστών και κώδικα μηχανής: Ο κωδικός μηχανής είναι δύσκολος για τον άνθρωπο να κατανοήσει και να γράψει. Η γλώσσα συναρμολόγησης χρησιμοποιεί μνημονικά (σύντομα, συμβολικά ονόματα) για να αντιπροσωπεύει τις οδηγίες μηχανής, καθιστώντας ευκολότερη την προγραμματισμό υπολογιστών απευθείας στο επίπεδο υλικού.

* Άμεση έλεγχος υλικού: Η γλώσσα συναρμολόγησης επιτρέπει στους προγραμματιστές να έχουν πολύ ακριβή και κοκκώδη έλεγχο στους πόρους υλικού του υπολογιστή, όπως καταχωρητές CPU, τοποθεσίες μνήμης και θύρες I/O.

* Βελτιστοποίηση: Η γλώσσα συναρμολόγησης επιτρέπει την τελειοποίηση του κώδικα για την απόδοση. Οι προγραμματιστές μπορούν να βελτιστοποιήσουν συγκεκριμένα τμήματα κώδικα για ταχύτητα, μέγεθος ή κατανάλωση ενέργειας επιλέγοντας προσεκτικά τις πιο αποτελεσματικές οδηγίες μηχανής.

* Κατανόηση της αρχιτεκτονικής υπολογιστών: Η μάθηση και η χρήση της γλώσσας συναρμολόγησης παρέχει μια βαθύτερη κατανόηση του τρόπου με τον οποίο η CPU και η εργασία μνήμης. Βοηθά τους προγραμματιστές να κατανοήσουν τον τρόπο με τον οποίο μεταφράζεται ο κώδικας υψηλού επιπέδου σε οδηγίες μηχανής.

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

* Αντίστροφη μηχανική: Η γλώσσα συναρμολόγησης είναι ζωτικής σημασίας στο λογισμικό αντίστροφης μηχανικής για να κατανοήσει τη λειτουργικότητά της, να εντοπίσει τα τρωτά σημεία ή να τροποποιήσει τη συμπεριφορά της.

Λειτουργικότητα:

* Mnemonics: Η γλώσσα συναρμολόγησης χρησιμοποιεί μνημονικά για να αντιπροσωπεύει τις οδηγίες μηχανής. Για παράδειγμα, το `mov` αντιπροσωπεύει την εντολή" Move ", το` add 'αντιπροσωπεύει "προσθήκη", `jmp' αντιπροσωπεύει το" άλμα ", και ούτω καθεξής.

* Μητρώα: Οι οδηγίες γλώσσας συναρμολόγησης χειρίζονται άμεσα τα μητρώα CPU. Τα μητρώα είναι μικρές τοποθεσίες αποθήκευσης υψηλής ταχύτητας εντός της CPU. Τα κοινά μητρώα περιλαμβάνουν συσσωρευτή (π.χ., `ax`,` eax`, `rax`), βασικό μητρώο (π.χ.,` bx`, `eBx`,` rbx`), counter register (π.χ., `cx`,` eCx`, `rcx`), μητρώο δεδομένων (π.χ.,` dx ', `edx`, rdx') (π.χ., `sp`,` esp`, `rsp`), δείκτης βάσης (π.χ.,` bp`, `eBP`,` rbp`) και δείκτης διδασκαλίας (π.χ. `ip`,` eip`, `rip`).

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

* Λειτουργίες απευθυνόμενοι: Οι γλώσσες συναρμολόγησης προσφέρουν διάφορους τρόπους διεύθυνσης για πρόσβαση σε δεδομένα στη μνήμη, όπως:

* άμεση διεύθυνση: Ο τελεστής είναι μια σταθερή τιμή.

* Άμεση διεύθυνση: Ο τελεστής είναι μια διεύθυνση μνήμης.

* Διευθυντής μητρώου: Ο τελεστής είναι ένα μητρώο CPU.

* έμμεση διεύθυνση: Ο τελεστής είναι ένα μητρώο που περιέχει τη διεύθυνση μνήμης.

* Διευθυντής ευρετηρίου: Ο τελεστής υπολογίζεται προσθέτοντας μια τιμή καταχωρητή (ευρετήριο) σε μια διεύθυνση βάσης.

* Ροή ελέγχου: Η γλώσσα συναρμολόγησης παρέχει οδηγίες για τον έλεγχο της ροής εκτέλεσης, όπως:

* Jump (JMP): Απεριόριστο άλμα σε μια συγκεκριμένη διεύθυνση.

* Πλεονεκτήματα υπό όρους (JE, JNE, JG, JL, κλπ.): Μεταβείτε σε μια συγκεκριμένη διεύθυνση με βάση την κατάσταση των σημαίων CPU (π.χ. μηδενική σημαία, σημαία μεταφοράς, σημαία σημείων).

* κλήση (κλήση): Καλέστε μια υπορουτίνα (λειτουργία).

* επιστροφή (ret): Επιστροφή από μια υπορουτίνα.

* Assembler: Ο κωδικός γλώσσας συναρμολόγησης μεταφράζεται σε κώδικα μηχανής από ένα πρόγραμμα που ονομάζεται assembler . Ο Assembler διαβάζει τον κωδικό συναρμολόγησης, μεταφράζει κάθε μνημονικό στην αντίστοιχη οδηγία του κώδικα του μηχανήματος και δημιουργεί ένα αρχείο αντικειμένου (π.χ., .o`, `.obj`) που περιέχει τον κώδικα μηχανής.

* linker: Τα αρχεία αντικειμένων που παράγονται από τον συναρμολογητή συνδέονται μεταξύ τους με ένα linker για να δημιουργήσετε ένα εκτελέσιμο αρχείο (π.χ., `.exe`,` .elf`). Ο σύνδεσμος επιλύει τις αναφορές μεταξύ διαφορετικών αρχείων αντικειμένων και τα συνδυάζει σε ένα ενιαίο πρόγραμμα Runnable.

* Οδηγίες/pseudo-ops: Η γλώσσα συναρμολόγησης περιλαμβάνει συνήθως οδηγίες (που ονομάζονται επίσης pseudo-ops) που είναι οδηγίες στον συναρμολογητή, όχι στις πραγματικές οδηγίες μηχανής. Αυτές οι οδηγίες χρησιμοποιούνται για:

* Καθορίστε τα δεδομένα (π.χ., `db`,` dw`, `dd` για τον ορισμό bytes, λέξεις και διπλές λέξεις, αντίστοιχα).

* Διαθέστε μνήμη (π.χ., `resb`,` resw`, `resd` για τη διατήρηση της μνήμης για bytes, λέξεις και διπλές λέξεις).

* Καθορίστε τις ετικέτες (συμβολικά ονόματα για θέσεις μνήμης ή διευθύνσεις κώδικα).

* Συμπεριλάβετε άλλα αρχεία.

* Ελέγξτε τη διαδικασία συναρμολόγησης.

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

Παράδειγμα (συγκρότημα Intel x86):

`` `Συνέλευση

; Παράδειγμα:Προσθέτει δύο αριθμούς και αποθηκεύει το αποτέλεσμα στη μνήμη

Τμήμα .Data

Num1 DW 10; Ορίστε μια λέξη (2 bytes) μεταβλητή NUM1 με τιμή 10

Num2 DW 20; Ορίστε μια λέξη μεταβλητή NUM2 με τιμή 20

Αποτέλεσμα DW 0; Ορίστε ένα αποτέλεσμα μεταβλητής λέξης, αρχικοποιημένο σε 0

Τμήμα.

Global _start; Σημείο εισόδου για το πρόγραμμα

_αρχή:

MOV AX, [NUM1]. Μετακινήστε την τιμή του NUM1 στον καταχωρητή AX

προσθέστε τσεκούρι, [NUM2]; Προσθέστε την τιμή του NUM2 στον καταχωρητή AX

mov [αποτέλεσμα], τσεκούρι; Μετακινήστε την τιμή στο μητρώο AX στη θέση μνήμης του αποτελέσματος

; Έξοδος από το πρόγραμμα (συγκεκριμένη πλατφόρμα, αυτό είναι το παράδειγμα Linux)

mov eax, 1; Αριθμός SYS_EXIT SYSCALL

XOR EBX, EBX; Κωδικός εξόδου 0

int 0x80; καλέστε τον πυρήνα

`` `

Συνοπτικά:

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

Συναφής σύστασή

Πνευματικά δικαιώματα © Γνώση Υπολογιστών Όλα τα δικαιώματα κατοχυρωμένα