Βασικά στοιχεία της γλώσσας assembly και της δομής εντολών. Μορφή δεδομένων και δομή εντολών γλώσσας συγκρότησης. Στον κλάδο "Προγραμματισμός συστήματος"

Εισαγωγή.

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

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

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

). Η παραγόμενη ακολουθία συμβόλων χρησιμοποιείται για την εκτέλεση των λειτουργιών που έχουν εκχωρηθεί στο αρχικό πρόγραμμα.

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

Χαρακτηριστικά της γλώσσας.

Κύρια χαρακτηριστικά του assembler:

● αντί για δυαδικούς κώδικες, η γλώσσα χρησιμοποιεί συμβολικά ονόματα - βελτίωση της μνήμης.Για παράδειγμα, για την εντολή προσθήκης (

) χρησιμοποιούνται μνημονικά

Αφαιρέσεις (

πολλαπλασιασμός (

Τμήματα (

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

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

● η γλώσσα παρέχει πρόσβαση σε όλα τα αντικείμενακαι ομάδες. Οι γλώσσες υψηλού επιπέδου δεν έχουν αυτήν την ικανότητα. Για παράδειγμα, η γλώσσα assembly σάς επιτρέπει να ελέγχετε bits του καταχωρητή σημαίας και γλώσσας υψηλού επιπέδου (για παράδειγμα,

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

● γλώσσα συναρμολόγησης δεν είναι μια καθολική γλώσσα.Κάθε συγκεκριμένη ομάδα μικροεπεξεργαστών έχει το δικό της assembler. Οι γλώσσες υψηλού επιπέδου δεν έχουν αυτό το μειονέκτημα.

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

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

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

Στα περισσότερα προγράμματα, μόνο ένα μικρό ποσοστό του συνολικού κώδικα είναι υπεύθυνο για ένα μεγάλο ποσοστό του χρόνου εκτέλεσης του προγράμματος. Συνήθως, το 1% του προγράμματος είναι υπεύθυνο για το 50% του χρόνου εκτέλεσης και το 10% του προγράμματος είναι υπεύθυνο για το 90% του χρόνου εκτέλεσης. Επομένως, για τη σύνταξη ενός συγκεκριμένου προγράμματος σε πραγματικές συνθήκες, χρησιμοποιείται τόσο ο assembler όσο και μία από τις γλώσσες υψηλού επιπέδου.

Μορφή χειριστή στη γλώσσα assembly.

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

Πεδίο ετικέτας.

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

● κάντε μια υπό όρους ή άνευ όρων μετάβαση στην εντολή.

● αποκτήστε πρόσβαση στην τοποθεσία όπου είναι αποθηκευμένα τα δεδομένα.

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

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

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

Πεδίο κωδικού λειτουργίας.

Αυτό το πεδίο περιέχει τον μνημονικό κώδικα για μια εντολή ή ψευδοεντολή (δείτε παρακάτω). Ο μνημονικός κώδικας εντολής επιλέγεται από τους προγραμματιστές γλωσσών. Στη γλώσσα assembly

Το mnemonic επιλέγεται για να φορτώσει έναν καταχωρητή από τη μνήμη

), και για να αποθηκεύσετε τα περιεχόμενα του μητρώου στη μνήμη - ένα μνημονικό

). Σε γλώσσες assembly

και για τις δύο λειτουργίες μπορείτε να χρησιμοποιήσετε το ίδιο όνομα, αντίστοιχα

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

Η μνημονική των καταχωρητών εξαρτάται επίσης από την έκδοση assembler (Πίνακας 5.2.1).

Πεδίο τελεστών.

Εδώ βρίσκεται Επιπλέον πληροφορίες, απαραίτητο για την εκτέλεση της επέμβασης. Στο πεδίο τελεστών για εντολές μετάβασης, υποδεικνύεται η διεύθυνση στην οποία πρέπει να γίνει το άλμα, καθώς και οι διευθύνσεις και οι καταχωρητές που είναι τελεστές για την εντολή μηχανής. Ως παράδειγμα, δίνουμε τελεστές που μπορούν να χρησιμοποιηθούν για επεξεργαστές 8-bit

● αριθμητικά δεδομένα,

παρουσιάζονται σε διαφορετικά συστήματα αριθμών. Για να υποδείξει το σύστημα αριθμών που χρησιμοποιείται, η σταθερά ακολουθείται από ένα από τα λατινικά γράμματα: B,

Αντίστοιχα, δυαδικά, οκταδικά, δεκαδικά συστήματα αριθμών (

Δεν χρειάζεται να το γράψετε). Αν το πρώτο ψηφίο ενός δεκαεξαδικού αριθμού είναι Α, Β, Γ,

Στη συνέχεια προστίθεται ένα ασήμαντο 0 (μηδέν) μπροστά.

● κωδικοί εσωτερικών καταχωρητών μικροεπεξεργαστή και κυψελών μνήμης

M (πηγές ή δέκτες πληροφοριών) με τη μορφή των γραμμάτων A, B, C,

M ή τις διευθύνσεις τους σε οποιοδήποτε σύστημα αριθμών (για παράδειγμα, 10B - διεύθυνση μητρώου

σε δυαδικό σύστημα).

● αναγνωριστικά,

για νηολογημένα ζεύγη αεροσκαφών,

Τα πρώτα γράμματα είναι Β,

Ν; για ένα ζεύγος συσσωρευτή και καταχωρητή χαρακτηριστικών -

; για τον μετρητή προγράμματος -

;για τον δείκτη στοίβας -

● ετικέτες που υποδεικνύουν τις διευθύνσεις των τελεστών ή τις επόμενες οδηγίες στην υπό όρους

(εάν πληρούται η προϋπόθεση) και άνευ όρων μεταβάσεις.Για παράδειγμα, ο τελεστής M1 στην εντολή

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

● εκφράσεις,

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

Προσδιορίστε τη λέξη) και εισαγάγετε αργότερα Εναλλακτική επιλογη.

που ήταν στη γλώσσα των επεξεργαστών από την αρχή

Σε γλωσσική έκδοση

μεταχειρισμένος

Ορίστε μια σταθερά).

Οι επεξεργαστές επεξεργάζονται τελεστές διαφορετικού μήκους. Για να το ορίσουν, οι προγραμματιστές assembler έλαβαν διαφορετικές αποφάσεις, για παράδειγμα:

Οι καταχωρητές II διαφορετικών μηκών έχουν διαφορετικά ονόματα: EAX - για τοποθέτηση τελεστών 32 bit (τύπος

) AX - για 16-bit (τύπος

και AN - για 8-bit (τύπος

● για επεξεργαστές

Σε κάθε κωδικό λειτουργίας προστίθενται επιθήματα: επίθημα

Για τον τύπο

; επίθημα ".Β" για τον τύπο

διαφορετικοί κωδικοί λειτουργίας χρησιμοποιούνται για τελεστές διαφορετικού μήκους, για παράδειγμα, για τη φόρτωση ενός byte, μισής λέξης (

) και λέξεις σε έναν καταχωρητή 64-bit χρησιμοποιώντας κωδικούς λειτουργίας

αντίστοιχα.

Πεδίο σχολίων.

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

● ερωτηματικό (;) σε γλώσσες για τους επεξεργαστές της εταιρείας

Θαυμαστικό(!) σε γλώσσες για

Κάθε ξεχωριστή γραμμή σχολίου προηγείται από έναν κύριο χαρακτήρα.

Ψευδοεντολές (οδηγίες).

Στη γλώσσα assembly υπάρχουν δύο κύριοι τύποι εντολών:

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

ψευδοεντολέςή οδηγίες,έχει σχεδιαστεί για να εξυπηρετεί τη διαδικασία μετάφρασης ενός προγράμματος σε μια γλώσσα συνδυασμού κώδικα. Ως παράδειγμα στον πίνακα. Το 5.2.2 δείχνει μερικές ψευδοεντολές από το assembler

για την οικογένεια

.

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

● γράψτε την απαιτούμενη σειρά εντολών όποτε εμφανίζεται. Αυτή η προσέγγιση οδηγεί σε αύξηση του όγκου του προγράμματος.

● τακτοποιήστε αυτήν την ακολουθία σε μια διαδικασία (υπορουτίνα) και καλέστε την εάν είναι απαραίτητο. Αυτή η έξοδος έχει τα μειονεκτήματά της: κάθε φορά που πρέπει να εκτελείτε μια εντολή κλήσης ειδικής διαδικασίας και μια εντολή επιστροφής, η οποία, εάν η ακολουθία είναι σύντομη και χρησιμοποιείται συχνά, μπορεί να μειώσει σημαντικά την ταχύτητα του προγράμματος.

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

Μια μακροεντολή, ή μακροεντολή, χαρακτηρίζεται από τρεις πτυχές: μακροορισμό, μακροαναστροφή και μακροεπέκταση.

Μακροορισμός

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

Ο ορισμός της μακροεντολής έχει την ακόλουθη δομή:

Κατάλογος εκφράσεων. Μακροορισμός

Στη δεδομένη δομή του μακροορισμού, μπορούν να διακριθούν τρία μέρη:

● τίτλος

μακροεντολή, συμπεριλαμβανομένου του ονόματος

Ψευτοεντολή

και ένα σύνολο παραμέτρων.

● σημειώνονται με τελείες σώμαμακροεντολή?

● ομάδα

αποφοίτηση

μακροοικονομικούς ορισμούς.

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

Για να επανασυναρμολογήσετε την επιλεγμένη ομάδα εντολών, χρησιμοποιείται μια ένσταση που αποτελείται από το όνομα

εντολές macro και λίστα παραμέτρων με άλλες τιμές.

Όταν ο assembler συναντά έναν ορισμό μακροεντολής κατά τη διαδικασία μεταγλώττισης, τον αποθηκεύει στον πίνακα ορισμού μακροεντολών. Σε επόμενες εμφανίσεις στο πρόγραμμα του ονόματος (

) μιας μακροεντολής, ο συναρμολογητής την αντικαθιστά με το σώμα της μακροεντολής.

Η χρήση ενός ονόματος μακροεντολής ως opcode ονομάζεται μακρο-αντιστροφή(κλήση μακροεντολής) και αντικατάστασή του με το σώμα της μακροεντολής - μακροοικονομική επέκταση.

Εάν ένα πρόγραμμα αναπαρίσταται ως μια ακολουθία χαρακτήρων (γράμματα, αριθμοί, κενά, σημεία στίξης και επιστροφές μεταφοράς για να μετακινηθείτε σε μια νέα γραμμή), τότε η επέκταση μακροεντολών συνίσταται στην αντικατάσταση ορισμένων αλυσίδων από αυτήν την ακολουθία με άλλες αλυσίδες.

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

Η διαδικασία συναρμολόγησης πραγματοποιείται σε δύο περάσματα:

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

● το δεύτερο πέρασμα επεξεργάζεται το πρόγραμμα που προκύπτει χωρίς μακροεντολές.

Μακροεντολές με παραμέτρους.

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

● με πραγματικόςπαραμέτρους που τοποθετούνται στο πεδίο τελεστών της κλήσης μακροεντολής.

● με επίσημοςΠαράμετροι. Κατά την επέκταση της μακροεντολής, κάθε επίσημη παράμετρος που εμφανίζεται στο σώμα της μακροεντολής αντικαθίσταται από την αντίστοιχη πραγματική παράμετρο.

χρησιμοποιώντας μακροεντολές με παραμέτρους.

Το πρόγραμμα 1 περιέχει δύο παρόμοιες ακολουθίες εντολών, που διαφέρουν στο ότι η πρώτη ανταλλάσσει το P και

Και το δεύτερο

Το πρόγραμμα 2 περιλαμβάνει μια μακροεντολή με δύο επίσημες παραμέτρους P1 και P2. Κατά την επέκταση της μακροεντολής, κάθε χαρακτήρας P1 εντός του σώματος της μακροεντολής αντικαθίσταται από την πρώτη πραγματική παράμετρο (P,

), και το σύμβολο P2 αντικαθίσταται από τη δεύτερη πραγματική παράμετρο (

) από το πρόγραμμα Νο. 1. Στην κλήση μακροεντολής

Το πρόγραμμα 2 επισημαίνεται: P,

Η πρώτη πραγματική παράμετρος,

Δεύτερη πραγματική παράμετρος.

Πρόγραμμα 1

Πρόγραμμα 2

MOV EBX,Q MOV EAX,Pl

MOV Q,EAX MOV EBX,P2

MOV P,EBX MOV P2,EAX

Εκτεταμένες δυνατότητες.

Ας δούμε μερικές προηγμένες δυνατότητες γλώσσας

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

η ετικέτα δηλώνεται τοπική (

) και χάρη στις προηγμένες δυνατότητες, ο assembler δημιουργεί αυτόματα μια διαφορετική ετικέτα κάθε φορά που επεκτείνεται η μακροεντολή.

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

IF WORDSIZE GT 16 M2 MACRO

Η μακροεντολή M2 μπορεί να οριστεί και στα δύο μέρη της δήλωσης

Ωστόσο, ο ορισμός εξαρτάται από τον επεξεργαστή στον οποίο συναρμολογείται το πρόγραμμα: 16-bit ή 32-bit. Εάν δεν κληθεί το M1, τότε η μακροεντολή M2 δεν θα οριστεί καθόλου.

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

Σχετικά με τη χρήση των μέσων μακροεντολών στο assembler.

Όταν χρησιμοποιείτε μακροεντολές, ο συναρμολογητής πρέπει να μπορεί να εκτελεί δύο λειτουργίες: αποθήκευση μακροεντολώνΚαι επεκτείνουν τις μακροοικονομικές προκλήσεις.

Αποθήκευση ορισμών μακροεντολών.

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

Όταν αντιμετωπίζετε μια μακροεντολή κατά τη συναρμολόγηση δημιουργειται:

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

● λίστα επίσημοςΠαράμετροι.

Το σώμα της μακροεντολής, που είναι απλώς μια συμβολοσειρά χαρακτήρων, διαβάζεται και αποθηκεύεται στον πίνακα ορισμού μακροεντολών. Οι τυπικές παράμετροι που εμφανίζονται στο σώμα του βρόχου επισημαίνονται ΕΙΔΙΚΟΣ ΧΑΡΑΚΤΗΡΑΣ.

Εσωτερική αναπαράσταση μιας μακροεντολής

από το παραπάνω παράδειγμα για το πρόγραμμα 2 (σελ. 244) είναι:

MOV EAX, MOV EBX, MOV MOV &

όπου το ερωτηματικό χρησιμοποιείται ως χαρακτήρας επιστροφής μεταφοράς και το σύμβολο & χρησιμοποιείται ως ο τυπικός χαρακτήρας παραμέτρου.

Επέκταση κλήσεων μακροεντολών.

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

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

Συναρμολογητής δύο περασμάτων.

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

● μεταφράστε το σε γλώσσα μηχανής.

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

● επαναλάβετε τις διαδικασίες που αναφέρονται μέχρι να μεταφραστεί ολόκληρο το πρόγραμμα.

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

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

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

Πρώτο πέρασμα.

Γκολ πρώτης πάσας- χτίστε έναν πίνακα συμβόλων. Όπως σημειώθηκε παραπάνω, ένας άλλος στόχος του πρώτου πέρασμα είναι να διατηρηθούν όλοι οι ορισμοί μακροεντολών και να επεκταθούν οι κλήσεις όπως εμφανίζονται. Κατά συνέπεια, τόσο ο ορισμός συμβόλων όσο και η επέκταση της μακροεντολής συμβαίνουν σε ένα πέρασμα. Το σύμβολο μπορεί να είναι είτε επιγραφή,ή έννοια,στην οποία έχει εκχωρηθεί ένα συγκεκριμένο όνομα χρησιμοποιώντας την οδηγία -you:

;Τιμή - μέγεθος buffer

Δίνοντας νόημα σε συμβολικά ονόματα στο πεδίο ετικέτας εντολών, ο assembler ουσιαστικά καθορίζει τις διευθύνσεις που θα έχει κάθε εντολή κατά την εκτέλεση του προγράμματος. Για το σκοπό αυτό, ο συναρμολογητής αποθηκεύει κατά τη διαδικασία συναρμολόγησης μετρητής διευθύνσεων οδηγιών(

) ως ειδική μεταβλητή. Στην αρχή του πρώτου περάσματος, η τιμή της ειδικής μεταβλητής ορίζεται στο 0 και αυξάνεται μετά από κάθε εντολή που υποβάλλεται σε επεξεργασία κατά το μήκος αυτής της εντολής. Ως παράδειγμα στον πίνακα. Το 5.2.3 δείχνει ένα τμήμα προγράμματος που υποδεικνύει το μήκος των εντολών και τις τιμές του μετρητή. Στο πρώτο πέρασμα, δημιουργούνται πίνακες συμβολικά ονόματα, οδηγίεςΚαι κωδικούς λειτουργίας,και αν χρειαστεί κατά γράμματραπέζι. Το literal είναι μια σταθερά για την οποία ο assembler δεσμεύει αυτόματα τη μνήμη. Ας σημειώσουμε αμέσως ότι οι σύγχρονοι επεξεργαστές περιέχουν οδηγίες με άμεσες διευθύνσεις, επομένως οι συναρμολογητές τους δεν υποστηρίζουν literals.

Πίνακας ονόματος συμβόλων

περιέχει ένα στοιχείο για κάθε όνομα (Πίνακας 5.2.4). Κάθε στοιχείο του πίνακα συμβολικών ονομάτων περιέχει το ίδιο το όνομα (ή έναν δείκτη σε αυτό), την αριθμητική του τιμή και μερικές φορές κάποιες πρόσθετες πληροφορίες, οι οποίες μπορεί να περιλαμβάνουν:

● το μήκος του πεδίου δεδομένων που σχετίζεται με το σύμβολο.

● bit ανακατανομής μνήμης (τα οποία υποδεικνύουν εάν η τιμή ενός συμβόλου αλλάζει εάν το πρόγραμμα φορτωθεί σε διαφορετική διεύθυνση από αυτήν που προοριζόταν η assembler).

● πληροφορίες σχετικά με το εάν το σύμβολο είναι προσβάσιμο εκτός της διαδικασίας.

Τα συμβολικά ονόματα είναι ετικέτες. Μπορούν να καθοριστούν χρησιμοποιώντας τελεστές (για παράδειγμα,

Πίνακας οδηγιών.

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

Πίνακας κωδικών λειτουργίας.

Για κάθε κωδικό λειτουργίας, ο πίνακας έχει ξεχωριστές στήλες: προσδιορισμός κωδικού λειτουργίας, τελεστής 1, τελεστής 2, δεκαεξαδική τιμή του κώδικα λειτουργίας, μήκος εντολής και τύπος εντολής (Πίνακας 5.2.5). Οι κώδικες λειτουργίας χωρίζονται σε ομάδες ανάλογα με τον αριθμό και τον τύπο των τελεστών. Ο τύπος εντολής καθορίζει τον αριθμό της ομάδας και καθορίζει τη διαδικασία που καλείται να επεξεργαστεί όλες τις εντολές σε αυτήν την ομάδα.

Δεύτερο πέρασμα.

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

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

Το πρόγραμμα πηγής μπορεί να περιέχει σφάλματα, για παράδειγμα:

το δεδομένο σύμβολο δεν ορίζεται ή ορίζεται περισσότερες από μία φορές.

● το opcode αντιπροσωπεύεται από ένα μη έγκυρο όνομα (λόγω τυπογραφικού λάθους), δεν έχει αρκετούς τελεστές ή έχει πάρα πολλούς τελεστές.

● χωρίς χειριστή

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

Άρθρα αφιερωμένα στη γλώσσα assembly.

ΕΘΝΙΚΟ ΠΑΝΕΠΙΣΤΗΜΙΟ ΤΟΥ ΟΥΖΜΠΕΚΙΣΤΑΝ ΜΕ ΤΟ ΟΝΟΜΑ ΜΙΡΖΟ ΟΥΛΟΥΓΚΠΕΚ

ΣΧΟΛΗ ΤΕΧΝΟΛΟΓΙΑΣ Η/Υ

Με θέμα: Σημασιολογική ανάλυση αρχείου EXE.

Ολοκληρώθηκε το:

Τασκένδη 2003.

Πρόλογος.

Γλώσσα συναρμολόγησης και δομή εντολών.

Δομή αρχείου EXE (σημασιολογική ανάλυση).

Δομή αρχείου COM.

Η αρχή της δράσης και της εξάπλωσης του ιού.

Αποσυναρμολογητής.

Προγράμματα.

Πρόλογος

Το επάγγελμα του προγραμματιστή είναι εκπληκτικό και μοναδικό. Στις μέρες μας, είναι αδύνατο να φανταστεί κανείς την επιστήμη και τη ζωή χωρίς την τελευταία λέξη της τεχνολογίας. Όλα όσα σχετίζονται με την ανθρώπινη δραστηριότητα δεν μπορούν να γίνουν χωρίς τεχνολογία υπολογιστών. Και αυτό συμβάλλει στην υψηλή ανάπτυξη και τελειότητά του. Αν και η ανάπτυξη των προσωπικών υπολογιστών ξεκίνησε όχι πολύ καιρό πριν, κατά τη διάρκεια αυτής της περιόδου έχουν γίνει κολοσσιαία βήματα σε προϊόντα λογισμικού και αυτά τα προϊόντα θα χρησιμοποιούνται ευρέως για μεγάλο χρονικό διάστημα. Ο τομέας της γνώσης που σχετίζεται με τους υπολογιστές έχει υποστεί έκρηξη, όπως και η αντίστοιχη τεχνολογία. Αν δεν λάβουμε υπόψη την εμπορική πλευρά, τότε μπορούμε να πούμε ότι δεν υπάρχουν ξένοι σε αυτόν τον τομέα επαγγελματικής δραστηριότητας. Πολλοί άνθρωποι αναπτύσσουν προγράμματα όχι για κέρδος ή εισόδημα, αλλά με ελεύθερη βούληση, από πάθος. Φυσικά, αυτό δεν πρέπει να επηρεάσει την ποιότητα του προγράμματος και σε αυτήν την επιχείρηση, ας πούμε έτσι, υπάρχει ανταγωνισμός και ζήτηση για ποιοτική εκτέλεση, σταθερή εργασία και ικανοποίηση όλων των σύγχρονων απαιτήσεων. Εδώ αξίζει επίσης να σημειωθεί η εμφάνιση μικροεπεξεργαστών στη δεκαετία του '60, που ήρθαν να αντικαταστήσουν έναν μεγάλο αριθμό σετ λαμπτήρων. Υπάρχουν ορισμένοι τύποι μικροεπεξεργαστών που διαφέρουν πολύ μεταξύ τους. Αυτοί οι μικροεπεξεργαστές διαφέρουν μεταξύ τους ως προς το βάθος bit και τις ενσωματωμένες εντολές συστήματος. Τα πιο συνηθισμένα είναι: Intel, IBM, Celeron, AMD κ.λπ. Όλοι αυτοί οι επεξεργαστές σχετίζονται με την προηγμένη αρχιτεκτονική των επεξεργαστών Intel. Η εξάπλωση των μικροϋπολογιστών προκάλεσε επανεξέταση της στάσης απέναντι στη γλώσσα assembly για δύο βασικούς λόγους. Πρώτον, τα προγράμματα γραμμένα σε γλώσσα assembly απαιτούν σημαντικά λιγότερη μνήμη και χρόνο εκτέλεσης. Δεύτερον, η γνώση της γλώσσας συναρμολόγησης και του κώδικα μηχανής που προκύπτει παρέχει κατανόηση της αρχιτεκτονικής του μηχανήματος, η οποία είναι απίθανο να παρέχεται όταν εργάζεστε σε γλώσσα υψηλού επιπέδου. Αν και οι περισσότεροι επαγγελματίες λογισμικού αναπτύσσονται σε γλώσσες υψηλού επιπέδου όπως η Pascal, η C ή οι Delphi, κάτι που είναι ευκολότερο όταν γράφετε προγράμματα, το πιο ισχυρό και αποτελεσματικό λογισμικόγραμμένο εξ ολοκλήρου ή εν μέρει σε γλώσσα assembly. Οι γλώσσες υψηλού επιπέδου σχεδιάστηκαν για να αποφεύγονται οι ειδικές τεχνικά χαρακτηριστικάσυγκεκριμένους υπολογιστές. Και η γλώσσα assembly, με τη σειρά της, έχει σχεδιαστεί για τις συγκεκριμένες ιδιαιτερότητες του επεξεργαστή. Επομένως, για να γράψετε ένα πρόγραμμα γλώσσας assembly για έναν συγκεκριμένο υπολογιστή, πρέπει να γνωρίζετε την αρχιτεκτονική του. Αυτές τις μέρες, η άποψη του κύριου προϊόν λογισμικούείναι ένα αρχείο EXE. Θεωρώντας θετικές πλευρέςΑυτό σημαίνει ότι ο συγγραφέας του προγράμματος μπορεί να είναι σίγουρος για την ακεραιότητά του. Αλλά συχνά αυτό απέχει πολύ από την περίπτωση. Υπάρχει και αποσυναρμολογητής. Χρησιμοποιώντας έναν αποσυναρμολογητή, μπορείτε να μάθετε διακοπές και κωδικούς προγραμμάτων. Δεν θα είναι δύσκολο για ένα άτομο με καλή γνώση του assembler να ξαναφτιάξει ολόκληρο το πρόγραμμα σύμφωνα με τα γούστα του. Ίσως εδώ προκύπτει το πιο άλυτο πρόβλημα - ο ιός. Γιατί οι άνθρωποι γράφουν έναν ιό; Κάποιοι κάνουν αυτήν την ερώτηση με έκπληξη, άλλοι με θυμό, αλλά παρόλα αυτά εξακολουθούν να υπάρχουν άνθρωποι που ενδιαφέρονται για αυτό το έργο όχι από την άποψη της πρόκλησης οποιασδήποτε βλάβης, αλλά ως ενδιαφέροντος για τον προγραμματισμό του συστήματος. Οι ιοί γράφονται από ποικίλοι λόγοι. Σε κάποιους αρέσουν οι κλήσεις συστήματος, ενώ άλλοι βελτιώνουν τις γνώσεις τους για το assembler. Θα προσπαθήσω να τα εξηγήσω όλα αυτά στο δικό μου εργασία μαθημάτων. Λέει επίσης όχι μόνο για τη δομή του αρχείου EXE αλλά και για τη γλώσσα assembly.

^ Γλώσσα συναρμολόγησης.

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

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

Εν ολίγοις, η γλώσσα assembly είναι μια συμβολική αναπαράσταση της γλώσσας μηχανής. Όλες οι διεργασίες σε ένα μηχάνημα στο χαμηλότερο επίπεδο υλικού οδηγούνται μόνο από εντολές (οδηγίες) στη γλώσσα μηχανής. Από αυτό είναι σαφές ότι, παρά το κοινό όνομα, η γλώσσα assembly είναι διαφορετική για κάθε τύπο υπολογιστή. Ισχύει και αυτό εμφάνισηπρογράμματα γραμμένα σε γλώσσα assembly και ιδέες που αυτή η γλώσσα αντικατοπτρίζει.

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

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

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

Ένας τυπικός σύγχρονος υπολογιστής (με βάση το i486 ή Pentium) αποτελείται από τα ακόλουθα στοιχεία (Εικόνα 1).

Ρύζι. 1. Υπολογιστής και περιφερειακά

Ρύζι. 2. Μπλοκ διάγραμμα προσωπικός υπολογιστής

Από το σχήμα (Εικόνα 1) είναι σαφές ότι ο υπολογιστής αποτελείται από πολλές φυσικές συσκευές, καθεμία από τις οποίες είναι συνδεδεμένη σε μία μονάδα, που ονομάζεται μονάδα συστήματος. Αν σκεφτούμε λογικά, είναι ξεκάθαρο ότι παίζει το ρόλο κάποιου είδους συντονιστικής συσκευής. Ας κοιτάξουμε μέσα στη μονάδα συστήματος (δεν χρειάζεται να προσπαθήσετε να μπείτε μέσα στην οθόνη - δεν υπάρχει τίποτα ενδιαφέρον εκεί, και εκτός αυτού, είναι επικίνδυνο): ανοίξτε τη θήκη και δείτε μερικές σανίδες, μπλοκ, καλώδια σύνδεσης. Για να κατανοήσουμε τον λειτουργικό τους σκοπό, ας δούμε το μπλοκ διάγραμμα ενός τυπικού υπολογιστή (Εικ. 2). Δεν διεκδικεί απόλυτη ακρίβεια και έχει σκοπό μόνο να δείξει τον σκοπό, τη διασύνδεση και την τυπική σύνθεση των στοιχείων ενός σύγχρονου προσωπικού υπολογιστή.

Ας συζητήσουμε το διάγραμμα στο Σχ. 2 σε κάπως αντισυμβατικό στυλ.
Είναι σύνηθες για ένα άτομο, όταν συναντά κάτι νέο, να αναζητά κάποιους συνειρμούς που μπορούν να τον βοηθήσουν να κατανοήσει το άγνωστο. Τι συσχετισμούς προκαλεί ο υπολογιστής; Για παράδειγμα, συχνά συνδέω έναν υπολογιστή με το ίδιο το άτομο. Γιατί;

Όταν κάποιος δημιουργούσε έναν υπολογιστή, κάπου βαθιά μέσα του νόμιζε ότι δημιουργούσε κάτι παρόμοιο με τον εαυτό του. Ο υπολογιστής διαθέτει όργανα για τη λήψη πληροφοριών από τον έξω κόσμο - πληκτρολόγιο, ποντίκι και μαγνητικές μονάδες δίσκου. Στο Σχ. 2 αυτά τα όργανα βρίσκονται στα δεξιά των διαύλων συστήματος. Ο υπολογιστής έχει όργανα που «χωνεύουν» τις πληροφορίες που λαμβάνονται - αυτά είναι ΕΠΕΞΕΡΓΑΣΤΗΣκαι RAM. Και τέλος, ο υπολογιστής έχει όργανα ομιλίας που παράγουν τα αποτελέσματα της επεξεργασίας. Αυτές είναι επίσης μερικές από τις συσκευές στα δεξιά.

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

Συνεχίζοντας την αναλογία με ένα άτομο, σημειώνουμε: για να μπορεί ένας υπολογιστής να τρώει σωστά, έχουν εφευρεθεί πολλά λειτουργικά συστήματα, μεταγλωττιστές για εκατοντάδες γλώσσες προγραμματισμού κ.λπ.. Όλα όμως στην πραγματικότητα είναι απλώς μια πιατέλα στην οποία τα τρόφιμα (προγράμματα) παραδίδονται σύμφωνα με ορισμένους κανόνες.στομάχι (υπολογιστής). Μόνο το στομάχι του υπολογιστή αγαπά τη δίαιτα, το μονότονο φαγητό - δώστε του δομημένες πληροφορίες, με τη μορφή αυστηρά οργανωμένων ακολουθιών μηδενικών και μονάδων, οι συνδυασμοί των οποίων συνθέτουν τη γλώσσα μηχανής.

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

Από όλα τα παραπάνω, μπορούμε να συμπεράνουμε ότι εφόσον η γλώσσα assembly είναι «μητρική» για έναν υπολογιστή, το πιο αποτελεσματικό πρόγραμμα μπορεί να γραφτεί μόνο σε αυτήν (υπό την προϋπόθεση ότι είναι γραμμένο από εξειδικευμένο προγραμματιστή). Υπάρχει ένα μικρό "αλλά" εδώ: αυτή είναι μια πολύ έντονη διαδικασία που απαιτεί πολλή προσοχή και πρακτική εμπειρία. Επομένως, στην πραγματικότητα, γράφουν κυρίως προγράμματα σε assembler που θα έπρεπε να παρέχουν αποτελεσματική εργασίαμε υλικό. Μερικές φορές τα τμήματα του προγράμματος που είναι κρίσιμα όσον αφορά τον χρόνο εκτέλεσης ή την κατανάλωση μνήμης γράφονται στο assembler. Στη συνέχεια, επισημοποιούνται με τη μορφή υπορουτίνων και συνδυάζονται με κώδικα σε γλώσσα υψηλού επιπέδου.

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

Αυτά τα μητρώα μπορούν να χωριστούν σε δύο μεγάλες ομάδες:

^ 16 εγγραφές χρηστών.

16 μητρώα συστήματος.

Τα προγράμματα της γλώσσας Assembly χρησιμοποιούν εγγραφές πολύ εντατικά. Τα περισσότερα μητρώα έχουν συγκεκριμένο λειτουργικό σκοπό.

Όπως υποδηλώνει το όνομα, τα μητρώα χρηστών ονομάζονται καταχωρήσεις χρηστών επειδή ο προγραμματιστής μπορεί να τα χρησιμοποιήσει όταν γράφει τα προγράμματά του. Αυτά τα μητρώα περιλαμβάνουν (Εικ. 3):

Οκτώ καταχωρητές 32-bit που μπορούν να χρησιμοποιηθούν από προγραμματιστές για την αποθήκευση δεδομένων και διευθύνσεων (ονομάζονται επίσης καταχωρητές γενικού σκοπού (GPR)):

έξι καταχωρητές τμημάτων: cs, ds, ss, es, fs, gs;

μητρώα κατάστασης και ελέγχου:

Οι σημαίες καταχωρούν σημαίες/σημαίες.

Καταχωρητής δείκτη εντολών eip/ip.

Ρύζι. 3. Μητρώα χρηστών μικροεπεξεργαστών i486 και Pentium

Γιατί πολλοί από αυτούς τους καταχωρητές εμφανίζονται με κάθετες; Όχι, αυτοί δεν είναι διαφορετικοί καταχωρητές - είναι μέρη ενός μεγάλου καταχωρητή 32 bit. Μπορούν να χρησιμοποιηθούν στο πρόγραμμα ως ξεχωριστά αντικείμενα. Αυτό έγινε για να διασφαλιστεί η λειτουργικότητα των προγραμμάτων που είναι γραμμένα για νεότερα μοντέλα 16-bit μικροεπεξεργαστών Intel, ξεκινώντας από το i8086. Οι μικροεπεξεργαστές i486 και Pentium έχουν κυρίως καταχωρητές 32 bit. Ο αριθμός τους, με εξαίρεση τους καταχωρητές τμημάτων, είναι ίδιος με αυτόν του i8086, αλλά η διάσταση είναι μεγαλύτερη, κάτι που αντικατοπτρίζεται στις ονομασίες τους - έχουν
πρόθεμα e (Εκτεταμένο).

^ Μητρώα γενικής χρήσης
Όλοι οι καταχωρητές αυτής της ομάδας σάς επιτρέπουν να έχετε πρόσβαση στα «κατώτερα» μέρη τους (βλ. Εικ. 3). Εξετάζοντας αυτό το σχήμα, σημειώστε ότι μόνο τα κατώτερα τμήματα 16 και 8 bit αυτών των καταχωρητών μπορούν να χρησιμοποιηθούν για αυτοδιευθυνσιοδότηση. Τα ανώτερα 16 bit αυτών των καταχωρητών δεν είναι διαθέσιμα ως ανεξάρτητα αντικείμενα. Αυτό έγινε, όπως σημειώσαμε παραπάνω, για συμβατότητα με νεότερα μοντέλα 16-bit μικροεπεξεργαστών Intel.

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

eax/ax/ah/al (Μητρώο συσσωρευτή) - μπαταρία.
Χρησιμοποιείται για την αποθήκευση ενδιάμεσων δεδομένων. Ορισμένες εντολές απαιτούν τη χρήση αυτού του μητρώου.

ebx/bx/bh/bl (Βασικός καταχωρητής) - καταχωρητής βάσης.
Χρησιμοποιείται για την αποθήκευση της βασικής διεύθυνσης κάποιου αντικειμένου στη μνήμη.

ecx/cx/ch/cl (Count register) - καταχωρητής μετρητή.
Χρησιμοποιείται σε ομάδες που εκτελούν ορισμένες επαναλαμβανόμενες ενέργειες. Η χρήση του είναι συχνά σιωπηρή και κρυμμένη στον αλγόριθμο της αντίστοιχης εντολής.
Για παράδειγμα, η εντολή για την οργάνωση ενός βρόχου βρόχου, εκτός από τη μεταφορά ελέγχου σε μια εντολή που βρίσκεται σε μια συγκεκριμένη διεύθυνση, αναλύει και μειώνει την τιμή του καταχωρητή ecx/cx κατά ένα.

edx/dx/dh/dl (Μητρώο δεδομένων) - μητρώο δεδομένων.
Ακριβώς όπως ο καταχωρητής eax/ax/ah/al, αποθηκεύει ενδιάμεσα δεδομένα. Σε ορισμένες εντολές η χρήση του είναι υποχρεωτική. Για ορισμένες εντολές αυτό συμβαίνει σιωπηρά.

Οι ακόλουθοι δύο καταχωρητές χρησιμοποιούνται για την υποστήριξη των λεγόμενων λειτουργιών αλυσίδας, δηλαδή λειτουργιών που επεξεργάζονται διαδοχικά αλυσίδες στοιχείων, καθένα από τα οποία μπορεί να έχει μήκος 32, 16 ή 8 bit:

esi/si (Source Index Register) - ευρετήριο πηγής.
Αυτός ο καταχωρητής σε αλυσιδωτές λειτουργίες περιέχει την τρέχουσα διεύθυνση του στοιχείου στην αλυσίδα πηγής.

edi/di (Destination Index register) - ευρετήριο του δέκτη (παραλήπτης).
Αυτός ο καταχωρητής σε αλυσιδωτές λειτουργίες περιέχει την τρέχουσα διεύθυνση στην αλυσίδα προορισμού.

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

esp/sp (Stack Pointer Register) - καταχωρητής δείκτη στοίβας.
Περιέχει έναν δείκτη στην κορυφή της στοίβας στο τρέχον τμήμα στοίβας.

ebp/bp (Βασικός καταχωρητής δείκτη) - καταχωρητής δείκτη βάσης πλαισίου στοίβας.
Σχεδιασμένο για να οργανώνει την τυχαία πρόσβαση σε δεδομένα μέσα στη στοίβα.

Μια στοίβα είναι μια περιοχή προγράμματος για την προσωρινή αποθήκευση αυθαίρετων δεδομένων. Φυσικά, τα δεδομένα μπορούν επίσης να αποθηκευτούν σε ένα τμήμα δεδομένων, αλλά σε αυτήν την περίπτωση, για κάθε δεδομένα που αποθηκεύονται προσωρινά, πρέπει να δημιουργηθεί ένα ξεχωριστό κελί μνήμης με όνομα, το οποίο αυξάνει το μέγεθος του προγράμματος και τον αριθμό των ονομάτων που χρησιμοποιούνται. Η ευκολία της στοίβας έγκειται στο γεγονός ότι η περιοχή της είναι επαναχρησιμοποιήσιμη και η αποθήκευση δεδομένων στη στοίβα και η ανάκτησή τους από εκεί γίνεται χρησιμοποιώντας τις αποτελεσματικές εντολές push και pop χωρίς να προσδιορίζονται ονόματα.
Η στοίβα χρησιμοποιείται παραδοσιακά, για παράδειγμα, για την αποθήκευση των περιεχομένων των καταχωρητών που χρησιμοποιούνται από ένα πρόγραμμα πριν από την κλήση μιας υπορουτίνας, η οποία, με τη σειρά της, θα χρησιμοποιήσει τους καταχωρητές του επεξεργαστή "για τους δικούς της σκοπούς". Τα αρχικά περιεχόμενα των καταχωρητών εμφανίζονται από τη στοίβα μετά την επιστροφή της υπορουτίνας. Μια άλλη κοινή τεχνική είναι να μεταβιβάζονται οι παράμετροι που απαιτεί σε μια υπορουτίνα μέσω της στοίβας. Η υπορουτίνα, γνωρίζοντας με ποια σειρά τοποθετούνται οι παράμετροι στη στοίβα, μπορεί να τις πάρει από εκεί και να τις χρησιμοποιήσει κατά την εκτέλεσή της. Διακριτικό χαρακτηριστικόΗ στοίβα είναι μια μοναδική σειρά με την οποία ανακτώνται τα δεδομένα που περιέχονται σε αυτήν: ανά πάσα στιγμή, μόνο το επάνω στοιχείο είναι διαθέσιμο στη στοίβα, δηλ. το στοιχείο που ωθήθηκε πιο πρόσφατα στη στοίβα. Αν σκάσετε το επάνω στοιχείο από τη στοίβα, το επόμενο στοιχείο είναι διαθέσιμο. Τα στοιχεία στοίβας βρίσκονται στην περιοχή μνήμης που έχει εκχωρηθεί για τη στοίβα, ξεκινώντας από το κάτω μέρος της στοίβας (δηλαδή από τη μέγιστη διεύθυνσή της) σε διευθύνσεις που μειώνονται διαδοχικά. Η διεύθυνση του επάνω, προσβάσιμου στοιχείου αποθηκεύεται στον καταχωρητή δείκτη στοίβας SP. Όπως κάθε άλλη περιοχή της μνήμης του προγράμματος, η στοίβα πρέπει να αποτελεί μέρος κάποιου τμήματος ή να αποτελεί ξεχωριστό τμήμα. Σε κάθε περίπτωση, η διεύθυνση τμήματος αυτού του τμήματος τοποθετείται στον καταχωρητή στοίβας τμήματος SS. Έτσι, το ζεύγος καταχωρητών SS:SP περιγράφει τη διεύθυνση ενός προσβάσιμου κελιού στοίβας: Το SS αποθηκεύει τη διεύθυνση τμήματος της στοίβας και το SP αποθηκεύει τη μετατόπιση των τελευταίων δεδομένων που είναι αποθηκευμένα στη στοίβα (Εικ. 4, α). Σημειώστε ότι στην αρχική κατάσταση, ο δείκτης στοίβας SP δείχνει σε ένα κελί που βρίσκεται κάτω από το κάτω μέρος της στοίβας και δεν περιλαμβάνεται σε αυτό.

Εικ. 4. Οργάνωση στοίβας: α - αρχική κατάσταση, β - μετά τη φόρτωση ενός στοιχείου (σε αυτό το παράδειγμα, τα περιεχόμενα του καταχωρητή AX), γ - μετά τη φόρτωση του δεύτερου στοιχείου (περιεχόμενα του καταχωρητή DS), δ - μετά την εκφόρτωση ενός στοιχείο, e - μετά την εκφόρτωση δύο στοιχείων και την επιστροφή στην αρχική τους κατάσταση.

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

Η στοίβα μεταβαίνει στην κατάσταση που φαίνεται στο Σχ. 1.10, β. Μπορεί να φανεί ότι ο δείκτης στοίβας μετατοπίζεται δύο byte προς τα πάνω (προς τις χαμηλότερες διευθύνσεις) και ο τελεστής που καθορίζεται στην εντολή push γράφεται σε αυτή τη διεύθυνση. Η ακόλουθη εντολή φόρτωσης στοίβας είναι π.χ.

θα βάλει τη στοίβα στην κατάσταση που φαίνεται στο Σχ. 1.10, γ. Η στοίβα θα αποθηκεύει τώρα δύο στοιχεία και θα είναι προσβάσιμο μόνο το επάνω, στο οποίο δείχνει ο δείκτης στοίβας SP. Εάν μετά από κάποιο χρονικό διάστημα χρειαστεί να επαναφέρουμε τα αρχικά περιεχόμενα των καταχωρητών που είναι αποθηκευμένα στη στοίβα, πρέπει να εκτελέσουμε τις εντολές pop (push) για να ξεφορτωθούν από τη στοίβα:

pop DS
pop AX

Πόσο μεγάλη πρέπει να είναι η στοίβα; Εξαρτάται από το πόσο εντατικά χρησιμοποιείται στο πρόγραμμα. Εάν, για παράδειγμα, σκοπεύετε να αποθηκεύσετε έναν πίνακα 10.000 byte στη στοίβα, τότε η στοίβα πρέπει να έχει τουλάχιστον αυτό το μέγεθος. Θα πρέπει να ληφθεί υπόψη ότι σε ορισμένες περιπτώσεις η στοίβα χρησιμοποιείται αυτόματα από το σύστημα, ιδιαίτερα κατά την εκτέλεση της εντολής διακοπής int 21h. Με αυτήν την εντολή, ο επεξεργαστής ωθεί πρώτα τη διεύθυνση επιστροφής στη στοίβα και, στη συνέχεια, το DOS ωθεί τα περιεχόμενα των καταχωρητών και άλλες πληροφορίες που σχετίζονται με το πρόγραμμα που έχει διακοπεί στη στοίβα. Επομένως, ακόμα κι αν ένα πρόγραμμα δεν χρησιμοποιεί καθόλου στοίβα, πρέπει να υπάρχει στο πρόγραμμα και να έχει μέγεθος τουλάχιστον αρκετές δεκάδες λέξεις. Στο πρώτο μας παράδειγμα, διαθέσαμε 128 λέξεις στη στοίβα, κάτι που σίγουρα είναι αρκετό.

^ Δομή ενός προγράμματος assembler

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

Υπάρχουν τέσσερις τύποι δηλώσεων assembler:

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

μακροεντολές - προτάσεις κειμένου προγράμματος που έχουν μορφοποιηθεί με συγκεκριμένο τρόπο, αντικαθίστανται κατά τη διάρκεια της εκπομπής από άλλες προτάσεις.

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

γραμμές σχολίων που περιέχουν χαρακτήρες, συμπεριλαμβανομένων των γραμμάτων του ρωσικού αλφαβήτου. Τα σχόλια αγνοούνται από τον μεταφραστή.

^ Σύνταξη συναρμολόγησης

Οι προτάσεις που συνθέτουν ένα πρόγραμμα μπορεί να είναι μια συντακτική κατασκευή που αντιστοιχεί σε μια εντολή, μακροεντολή, οδηγία ή σχόλιο. Για να τα αναγνωρίσει ο μεταφραστής assembler, πρέπει να σχηματιστούν σύμφωνα με ορισμένους συντακτικούς κανόνες. Για να γίνει αυτό, είναι καλύτερο να χρησιμοποιήσετε μια επίσημη περιγραφή της σύνταξης της γλώσσας, όπως οι κανόνες της γραμματικής. Οι πιο συνηθισμένοι τρόποι περιγραφής μιας γλώσσας προγραμματισμού με αυτόν τον τρόπο είναι τα συντακτικά διαγράμματα και οι εκτεταμένες φόρμες Backus-Naur. Για πρακτική χρήσηΤα συντακτικά διαγράμματα είναι πιο βολικά. Για παράδειγμα, η σύνταξη των δηλώσεων γλώσσας συγκρότησης μπορεί να περιγραφεί χρησιμοποιώντας τα συντακτικά διαγράμματα που φαίνονται στα παρακάτω σχήματα.

Ρύζι. 5. Μορφή πρότασης συναρμολόγησης

Ρύζι. 6. Μορφότυπος οδηγίας

Ρύζι. 7. Μορφή εντολών και μακροεντολών

Σε αυτές τις εικόνες:

όνομα ετικέτας - ένα αναγνωριστικό του οποίου η τιμή είναι η διεύθυνση του πρώτου byte της πρότασης στον πηγαίο κώδικα του προγράμματος που ορίζει.

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

ένας κωδικός λειτουργίας (OPC) και μια οδηγία είναι μνημονικά σύμβολα για την αντίστοιχη οδηγία μηχανής, μακροεντολή ή οδηγία μεταφραστή.

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

^ Πώς να χρησιμοποιήσετε τα συντακτικά διαγράμματα; Είναι πολύ απλό: το μόνο που χρειάζεται να κάνετε είναι να βρείτε και στη συνέχεια να ακολουθήσετε τη διαδρομή από την είσοδο του διαγράμματος (στα αριστερά) στην έξοδο του (στα δεξιά). Αν υπάρχει τέτοιο μονοπάτι, τότε η πρόταση ή η κατασκευή είναι συντακτικά σωστή. Εάν δεν υπάρχει τέτοιο μονοπάτι, τότε ο μεταγλωττιστής δεν θα αποδεχτεί αυτήν την κατασκευή. Όταν εργάζεστε με συντακτικά διαγράμματα, προσέξτε την κατεύθυνση της διέλευσης που υποδεικνύεται από τα βέλη, καθώς μεταξύ των διαδρομών μπορεί να υπάρχουν κάποιες που μπορούν να ακολουθηθούν από τα δεξιά προς τα αριστερά. Στην ουσία, τα συντακτικά διαγράμματα αντικατοπτρίζουν τη λογική της λειτουργίας του μεταφραστή κατά την ανάλυση των προτάσεων εισόδου του προγράμματος.

Οι αποδεκτοί χαρακτήρες κατά τη σύνταξη κειμένου προγράμματος είναι:

Ολα γράμματα: A-Z, a-z. Στην περίπτωση αυτή, τα κεφαλαία και τα πεζά γράμματα θεωρούνται ισοδύναμα.

Αριθμοί από 0 έως 9.

Σημάδια ?, @, $, _, &;

Διαχωριστές, . ()< > { } + / * % ! " " ? \ = # ^.

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

Τα λεξικά είναι:

Τα αναγνωριστικά είναι ακολουθίες έγκυρων χαρακτήρων που χρησιμοποιούνται για τον προσδιορισμό αντικειμένων προγράμματος, όπως κωδικούς λειτουργίας, ονόματα μεταβλητών και ονόματα ετικετών. Ο κανόνας για την εγγραφή αναγνωριστικών είναι ο εξής: ένα αναγνωριστικό μπορεί να αποτελείται από έναν ή περισσότερους χαρακτήρες. Ως σύμβολα μπορείτε να χρησιμοποιήσετε γράμματα του λατινικού αλφαβήτου, αριθμούς και μερικούς ειδικούς χαρακτήρες - _, ?, $, @. Ένα αναγνωριστικό δεν μπορεί να ξεκινά με έναν ψηφιακό χαρακτήρα. Το μήκος του αναγνωριστικού μπορεί να είναι έως και 255 χαρακτήρες, αν και ο μεταφραστής δέχεται μόνο τους πρώτους 32 και αγνοεί τους υπόλοιπους. Μπορείτε να προσαρμόσετε το μήκος των πιθανών αναγνωριστικών χρησιμοποιώντας την επιλογή γραμμή εντολών mv. Επιπλέον, είναι δυνατό να δοθεί εντολή στον μεταφραστή να διακρίνει μεταξύ κεφαλαίων και πεζών γραμμάτων ή να αγνοήσει τη διαφορά τους (κάτι που γίνεται από προεπιλογή).

^ Εντολές Assembler.

Οι εντολές Assembler αποκαλύπτουν τη δυνατότητα μεταφοράς των απαιτήσεών σας στον υπολογιστή, έναν μηχανισμό μεταφοράς ελέγχου σε ένα πρόγραμμα (κύκλοι και μεταβάσεις) για λογικές συγκρίσεις και οργάνωση προγράμματος. Ωστόσο, οι προγραμματιζόμενες εργασίες σπάνια είναι τόσο απλές. Τα περισσότερα προγράμματα περιέχουν μια σειρά από βρόχους στους οποίους επαναλαμβάνονται πολλές εντολές μέχρι να επιτευχθεί μια συγκεκριμένη απαίτηση και διάφορους ελέγχους που καθορίζουν ποια από τις διάφορες ενέργειες πρέπει να εκτελεστεί. Ορισμένες οδηγίες μπορούν να μεταφέρουν τον έλεγχο αλλάζοντας την κανονική ακολουθία βημάτων τροποποιώντας απευθείας την τιμή μετατόπισης στον δείκτη εντολών. Όπως αναφέρθηκε προηγουμένως, υπάρχουν διαφορετικές εντολές για διαφορετικούς επεξεργαστές, αλλά θα δούμε ορισμένες εντολές για τους επεξεργαστές 80186, 80286 και 80386.

Για να περιγράψουμε την κατάσταση των σημαιών μετά την εκτέλεση μιας συγκεκριμένης εντολής, θα χρησιμοποιήσουμε μια επιλογή από έναν πίνακα που αντικατοπτρίζει τη δομή του καταχωρητή σημαίας eflag:

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

1 - μετά την εκτέλεση της εντολής, ορίζεται η σημαία (ίση με 1).

0 - μετά την εκτέλεση της εντολής, η σημαία επαναφέρεται (ίση με 0).

r - η τιμή της σημαίας εξαρτάται από το αποτέλεσμα της εντολής.

Μετά την εκτέλεση της εντολής, η σημαία δεν ορίζεται.

space - μετά την εκτέλεση της εντολής, η σημαία δεν αλλάζει.

Ο ακόλουθος συμβολισμός χρησιμοποιείται για την αναπαράσταση τελεστών σε συντακτικά διαγράμματα:

r8, r16, r32 - ένας τελεστής σε έναν από τους καταχωρητές μεγέθους byte, λέξης ή διπλής λέξης.

m8, m16, m32, m48 - μέγεθος τελεστών μνήμης byte, λέξη, διπλή λέξη ή 48 bit.

i8, i16, i32 - byte, λέξη ή διπλή λέξη άμεσου μεγέθους τελεστών.

a8, a16, a32 - σχετική διεύθυνση (offset) στο τμήμα κώδικα.

Εντολές (με αλφαβητική σειρά):

*Οι εντολές αυτές περιγράφονται αναλυτικά.

ΠΡΟΣΘΗΚΗ
(Πρόσθεση)

Πρόσθεση

^ Διάγραμμα εντολών:

προσθήκη προορισμού, πηγής

Σκοπός: προσθήκη δύο τελεστών πηγής και προορισμού μεγέθους byte, λέξης ή διπλής λέξης.

Αλγόριθμος εργασίας:

προσθέστε τους τελεστές προέλευσης και προορισμού.

γράψτε το αποτέλεσμα προσθήκης στον δέκτη.

ορίστε σημαίες.

Κατάσταση σημαιών μετά την εκτέλεση της εντολής:

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

Εγγραφή συν εγγραφή ή μνήμη:

|000000dw|modregr/rm|

Καταχωρητής AX (AL) συν άμεση τιμή:

|0000010w|--data--|δεδομένα εάν w=1|

Εγγραφή ή μνήμη συν άμεση τιμή:

|100000sw|mod000r/m|--data--|δεδομένα εάν BW=01|

ΚΛΗΣΗ
(ΚΛΗΣΗ)

Κλήση διαδικασίας ή εργασίας

^ Διάγραμμα εντολών:

Σκοπός:

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

εναλλαγή εργασιών.

Αλγόριθμος εργασίας:
καθορίζεται από τον τύπο τελεστών:

Near label - τα περιεχόμενα του δείκτη εντολής eip/ip ωθούνται στη στοίβα και η νέα τιμή διεύθυνσης που αντιστοιχεί στην ετικέτα φορτώνεται στον ίδιο καταχωρητή.

Far label - τα περιεχόμενα του δείκτη εντολής eip/ip και cs ωθούνται στη στοίβα. Στη συνέχεια, νέες τιμές διευθύνσεων που αντιστοιχούν στη μακριά ετικέτα φορτώνονται στους ίδιους καταχωρητές.

R16, 32 ή m16, 32 - ορίστε έναν καταχωρητή ή ένα κελί μνήμης που περιέχει μετατοπίσεις στο τρέχον τμήμα εντολών στο οποίο μεταφέρεται ο έλεγχος. Όταν μεταφέρεται ο έλεγχος, τα περιεχόμενα του δείκτη εντολής eip/ip ωθούνται στη στοίβα.

Δείκτης μνήμης - ορίζει μια θέση μνήμης που περιέχει έναν δείκτη 4 ή 6 byte για την καλούμενη διαδικασία. Η δομή ενός τέτοιου δείκτη είναι 2+2 ή 2+4 byte. Η ερμηνεία ενός τέτοιου δείκτη εξαρτάται από τον τρόπο λειτουργίας του μικροεπεξεργαστή:

^ Κατάσταση σημαιών μετά την εκτέλεση εντολών (εκτός από την εναλλαγή εργασιών):

η εκτέλεση της εντολής δεν επηρεάζει τις σημαίες

Όταν γίνεται εναλλαγή μιας εργασίας, οι τιμές σημαίας αλλάζουν σύμφωνα με πληροφορίες σχετικά με τον καταχωρητή eflag στο τμήμα κατάστασης TSS της εργασίας στην οποία γίνεται εναλλαγή.
Εφαρμογή:
Η εντολή κλήσης σάς επιτρέπει να οργανώσετε μια ευέλικτη και πολλαπλών παραλλαγών μεταφορά ελέγχου σε μια υπορουτίνα διατηρώντας παράλληλα τη διεύθυνση του σημείου επιστροφής.

Κωδικός αντικειμένου (τέσσερις μορφές):

Απευθείας διευθυνσιοδότηση σε ένα τμήμα:

|11101000|dip-low|diep-high|

Έμμεση διευθυνσιοδότηση σε ένα τμήμα:

|11111111|mod010r/m|

Έμμεση διευθυνσιοδότηση μεταξύ τμημάτων:

|11111111|mod011r/m|

Απευθείας διευθυνσιοδότηση μεταξύ τμημάτων:

|10011010|offset-low|offset-high|seg-low|seg-high|

ΔΕΑ
(Σύγκριση τελεστών)

Σύγκριση τελεστών

^ Διάγραμμα εντολών:

cmp τελεστής 1, τελεστής 2

Σκοπός: σύγκριση δύο τελεστών.

Αλγόριθμος εργασίας:

εκτέλεση αφαίρεσης (τελεστής1-τελεστής2);

ανάλογα με το αποτέλεσμα ορίστε τα flags, μην αλλάζετε operand1 και operand2 (δηλαδή μην θυμάστε το αποτέλεσμα).

Εφαρμογή:
Αυτή η εντολήχρησιμοποιείται για τη σύγκριση δύο τελεστών με αφαίρεση χωρίς αλλαγή των τελεστών. Με βάση τα αποτελέσματα της εντολής, ορίζονται σημαίες. Η εντολή cmp χρησιμοποιείται με τις εντολές άλματος υπό όρους και την εντολή set byte by value setcc.

Κωδικός αντικειμένου (τρεις μορφές):

Εγγραφή ή μνήμη με εγγραφή:

|001110dw|modregr/m|

Άμεση τιμή με καταχωρητή AX (AL):

|0011110w|--data--|δεδομένα εάν w=1|

Άμεση τιμή με καταχωρητή ή μνήμη:

|100000sw|mod111r/m|--data--|δεδομένα εάν sw=0|

ΔΕΚΕΜΒΡΙΟΥ
(Μείωση τελεστή κατά 1)

Μείωση ενός τελεστή κατά ένα

^ Διάγραμμα εντολών:

τελεστής δεκ

Σκοπός: Μειώστε την τιμή ενός τελεστή στη μνήμη ή καταχωρήστε κατά 1.

Αλγόριθμος εργασίας:
η εντολή αφαιρεί 1 από τον τελεστή. Κατάσταση σημαιών μετά την εκτέλεση της εντολής:

Εφαρμογή:
Η εντολή dec χρησιμοποιείται για τη μείωση της τιμής ενός byte, λέξης, διπλής λέξης στη μνήμη ή εγγραφή κατά ένα. Ωστόσο, σημειώστε ότι η εντολή δεν επηρεάζει τη σημαία cf.

Εγγραφή: |01001reg|

^ Εγγραφή ή μνήμη: |1111111w|mod001r/m|

DIV
(Διαίρεση ανυπόγραφο)

Ανυπόγραφο τμήμα

Περίγραμμα ομάδας:

div divider

Σκοπός: Εκτελέστε μια λειτουργία διαίρεσης μεταξύ δύο δυαδικών τιμών χωρίς υπογραφή.

^ Αλγόριθμος λειτουργίας:
Η εντολή απαιτεί δύο τελεστές - το μέρισμα και τον διαιρέτη. Το μέρισμα καθορίζεται σιωπηρά και το μέγεθός του εξαρτάται από το μέγεθος του διαιρέτη, το οποίο καθορίζεται στην εντολή:

εάν ο διαιρέτης έχει μέγεθος ένα byte, τότε το μέρισμα πρέπει να βρίσκεται στον καταχωρητή αξόνων. Μετά την επέμβαση, το πηλίκο τοποθετείται σε al και το υπόλοιπο σε ah.

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

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

^ Κατάσταση σημαιών μετά την εκτέλεση της εντολής:

Εφαρμογή:
Η εντολή εκτελεί μια ακέραια διαίρεση των τελεστών, παράγοντας το αποτέλεσμα της διαίρεσης ως πηλίκο και το υπόλοιπο της διαίρεσης. Κατά την εκτέλεση μιας λειτουργίας διαίρεσης, μπορεί να προκύψει μια εξαίρεση: 0 - σφάλμα διαίρεσης. Αυτή η κατάσταση συμβαίνει σε μία από τις δύο περιπτώσεις: ο διαιρέτης είναι 0 ή το πηλίκο είναι πολύ μεγάλο για να χωρέσει στον καταχωρητή eax/ax/al.

Κωδικός αντικειμένου:

|1111011w|mod110r/m|

INT
(Διακοπή)

Κλήση της ρουτίνας σέρβις διακοπής

^ Διάγραμμα εντολών:

int interrupt_number

Σκοπός: καλέστε τη ρουτίνα υπηρεσίας διακοπής με τον αριθμό διακοπής που καθορίζεται από τον τελεστή εντολής.

^ Αλγόριθμος λειτουργίας:

σπρώξτε τις σημαίες καταχωρούν eflags/flags και τη διεύθυνση επιστροφής στη στοίβα. Όταν γράφετε μια διεύθυνση επιστροφής, πρώτα γράφονται τα περιεχόμενα του καταχωρητή τμημάτων cs και μετά τα περιεχόμενα του δείκτη εντολής eip/ip.

μηδενίστε τις σημαίες if και tf στο μηδέν.

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

^ Κατάσταση σημαιών μετά την εκτέλεση της εντολής:

Εφαρμογή:
Όπως μπορείτε να δείτε από τη σύνταξη, υπάρχουν δύο μορφές αυτής της εντολής:

int 3 - έχει τον δικό του ατομικό κωδικό λειτουργίας 0cch και καταλαμβάνει ένα byte. Αυτή η περίσταση καθιστά πολύ βολικό τη χρήση σε διάφορα προγράμματα εντοπισμού σφαλμάτων λογισμικού για τον ορισμό σημείων διακοπής αντικαθιστώντας το πρώτο byte οποιασδήποτε εντολής. Ο μικροεπεξεργαστής, συναντώντας μια εντολή με κωδικό λειτουργίας 0cch στην ακολουθία εντολών, καλεί το πρόγραμμα επεξεργασίας διακοπής με το διάνυσμα αριθμό 3, το οποίο χρησιμεύει για την επικοινωνία με τον εντοπισμό σφαλμάτων λογισμικού.

Η δεύτερη μορφή της εντολής καταλαμβάνει δύο byte, έχει έναν κωδικό 0cdh και σας επιτρέπει να ξεκινήσετε μια κλήση σε μια ρουτίνα υπηρεσίας διακοπής με έναν διανυσματικό αριθμό στην περιοχή 0-255. Τα χαρακτηριστικά της μεταφοράς ελέγχου, όπως σημειώθηκε, εξαρτώνται από τον τρόπο λειτουργίας του μικροεπεξεργαστή.

Κωδικός αντικειμένου (δύο μορφές):

Εγγραφή: |01000reg|

^ Εγγραφή ή μνήμη: |1111111w|mod000r/m|

J.C.C.
JCXZ/JECXZ
(Άλμα εάν συνθήκη)

(Άλμα αν CX=Μηδέν/ Άλμα αν ECX=Μηδέν)

Πήδα αν πληρούται η προϋπόθεση

Πήδα αν το CX/ECX είναι μηδέν

^ Διάγραμμα εντολών:

ετικέτα jcc
ετικέτα jcxz
ετικέτα jecxz

Σκοπός: μετάβαση εντός του τρέχοντος τμήματος εντολών ανάλογα με κάποια συνθήκη.

^ Αλγόριθμος εντολών (εκτός από jcxz/jecxz):
Έλεγχος της κατάστασης των σημαιών ανάλογα με τον κωδικό λειτουργίας (αντανακλά την κατάσταση που ελέγχεται):

Εάν η συνθήκη που ελέγχεται είναι αληθής, τότε μεταβείτε στο κελί που υποδεικνύεται από τον τελεστή.

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

Αλγόριθμος για την εντολή jcxz/jecxz:
Έλεγχος της συνθήκης ότι τα περιεχόμενα του καταχωρητή ecx/cx είναι ίσα με μηδέν:

εάν η κατάσταση που ελέγχεται

Δομή εντολών στη γλώσσα συναρμολόγησης Ο προγραμματισμός σε επίπεδο εντολών μηχανής είναι το ελάχιστο επίπεδο στο οποίο είναι δυνατός ο προγραμματισμός υπολογιστή. Το σύστημα εντολών του μηχανήματος πρέπει να είναι επαρκές για την εκτέλεση των απαιτούμενων ενεργειών με την έκδοση οδηγιών στον εξοπλισμό του μηχανήματος. Κάθε εντολή μηχανής αποτελείται από δύο μέρη: ένα λειτουργικό, που καθορίζει το «τι να κάνουμε» και έναν τελεστή, που καθορίζει τα αντικείμενα επεξεργασίας, δηλαδή «τι να κάνουμε». Μια εντολή μηχανής μικροεπεξεργαστή, γραμμένη σε γλώσσα Assembly, είναι μια ενιαία γραμμή που έχει την ακόλουθη μορφή: τελεστές εντολής/οδηγίας ετικέτας. σχόλια Η ετικέτα, η εντολή/οδηγία και ο τελεστής διαχωρίζονται με τουλάχιστον έναν χαρακτήρα διαστήματος ή καρτέλας. Οι τελεστές της εντολής χωρίζονται με κόμματα.

Δομή εντολών γλώσσας Assembly Μια εντολή assembler λέει στον μεταφραστή ποια ενέργεια πρέπει να εκτελέσει ο μικροεπεξεργαστής. Οι οδηγίες συναρμολόγησης είναι παράμετροι που καθορίζονται στο κείμενο του προγράμματος και επηρεάζουν τη διαδικασία συναρμολόγησης ή τις ιδιότητες του αρχείου εξόδου. Ο τελεστής καθορίζει την αρχική τιμή των δεδομένων (στο τμήμα δεδομένων) ή τα στοιχεία στα οποία εκτελείται η ενέργεια εντολής (στο τμήμα κώδικα). Μια εντολή μπορεί να έχει έναν ή δύο τελεστές ή κανέναν τελεστέα. Ο αριθμός των τελεστών καθορίζεται σιωπηρά από τον κώδικα εντολών. Εάν μια εντολή ή οδηγία πρέπει να συνεχιστεί στην επόμενη γραμμή, χρησιμοποιείται ο χαρακτήρας ανάστροφης κάθετο: "" . Από προεπιλογή, το assembler δεν κάνει διάκριση μεταξύ κεφαλαίων και πεζών γραμμάτων κατά τη σύνταξη εντολών και οδηγιών. Παραδείγματα οδηγιών και εντολών Μέτρηση db 1 ; Όνομα, οδηγία, ένας τελεστής mov eax, 0 ; Εντολή, δύο τελεστές

Τα αναγνωριστικά είναι ακολουθίες έγκυρων χαρακτήρων που χρησιμοποιούνται για να υποδηλώσουν ονόματα μεταβλητών και ονόματα ετικετών. Το αναγνωριστικό μπορεί να αποτελείται από έναν ή περισσότερους από τους ακόλουθους χαρακτήρες: όλα τα γράμματα του λατινικού αλφαβήτου. αριθμοί από το 0 έως το 9. ειδικοί χαρακτήρες: _, @, $, ? . Μια κουκκίδα μπορεί να χρησιμοποιηθεί ως ο πρώτος χαρακτήρας της ετικέτας. Τα δεσμευμένα ονόματα συναρμολογητών (οδηγίες, τελεστές, ονόματα εντολών) δεν μπορούν να χρησιμοποιηθούν ως αναγνωριστικά. Ο πρώτος χαρακτήρας του αναγνωριστικού πρέπει να είναι ένα γράμμα ή ένας ειδικός χαρακτήρας. Μέγιστο μήκοςΤο αναγνωριστικό έχει 255 χαρακτήρες, αλλά ο μεταφραστής δέχεται τους πρώτους 32 και αγνοεί τους υπόλοιπους. Όλες οι ετικέτες που είναι γραμμένες σε μια γραμμή που δεν περιέχει οδηγία assembler πρέπει να τελειώνουν με άνω και κάτω τελεία ":". Η ετικέτα, η εντολή (οδηγία) και ο τελεστής δεν χρειάζεται να ξεκινούν από κάποια συγκεκριμένη θέση στη γραμμή. Συνιστάται η εγγραφή τους σε στήλη για μεγαλύτερη αναγνωσιμότητα του προγράμματος.

Ετικέτες Όλες οι ετικέτες που είναι γραμμένες σε μια γραμμή που δεν περιέχει οδηγία assembler πρέπει να τελειώνουν με άνω και κάτω τελεία ":". Η ετικέτα, η εντολή (οδηγία) και ο τελεστής δεν χρειάζεται να ξεκινούν από κάποια συγκεκριμένη θέση στη γραμμή. Συνιστάται η εγγραφή τους σε στήλη για μεγαλύτερη αναγνωσιμότητα του προγράμματος.

Σχόλια Η χρήση σχολίων σε ένα πρόγραμμα βελτιώνει τη σαφήνειά του, ειδικά όταν ο σκοπός ενός συνόλου εντολών είναι ασαφής. Τα σχόλια ξεκινούν σε οποιαδήποτε γραμμή στη μονάδα πηγής με ένα ερωτηματικό (;). Όλοι οι χαρακτήρες στα δεξιά του "; «Στο τέλος της γραμμής είναι ένα σχόλιο. Ένα σχόλιο μπορεί να περιέχει οποιουσδήποτε εκτυπώσιμους χαρακτήρες, συμπεριλαμβανομένου του διαστήματος. Ένα σχόλιο μπορεί να καλύπτει ολόκληρη τη γραμμή ή να ακολουθεί μια εντολή στην ίδια γραμμή.

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

Μοντέλα μνήμης Πριν δηλώσετε τμήματα, πρέπει να καθορίσετε το μοντέλο μνήμης χρησιμοποιώντας μια οδηγία. MODEL modifier memory_model, calling_convention, OS_type, stack_parameter Βασικά μοντέλα μνήμης της γλώσσας assembly: Μοντέλο μνήμης Διευθυνσιοδότηση κώδικα Διευθυνσιοδότηση δεδομένων λειτουργικό σύστημαΚώδικας παρεμβολής και δεδομένων ΜΙΚΡΟ ΚΟΝΤΑ στο MS-DOS Αποδεκτό ΜΙΚΡΟ ΚΟΝΤΑ στο MS-DOS, Windows Όχι ΜΕΣΑΙΟ ΜΑΚΡΙΑ ΚΟΝΤΑ στο MS-DOS, Windows Όχι COMPACT ΚΟΝΤΑ ΜΑΚΡΙΑ MS-DOS, Windows Όχι ΜΕΓΑΛΑ ΜΑΚΡΙΑ MS-DOS, Windows Όχι ΤΕΡΑΣΤΙΑ ΜΑΚΡΙΑ MS-DOS, Windows Όχι ΚΟΝΤΑ σε Windows 2000, Windows XP, Αποδεκτά Windows FLAT NEAR NT,

Μοντέλα μνήμης Το μικροσκοπικό μοντέλο λειτουργεί μόνο σε εφαρμογές MS-DOS 16-bit. Σε αυτό το μοντέλο, όλα τα δεδομένα και ο κώδικας βρίσκονται σε ένα φυσικό τμήμα. Το μέγεθος του αρχείου προγράμματος σε αυτήν την περίπτωση δεν υπερβαίνει τα 64 KB. Το μικρό μοντέλο υποστηρίζει ένα τμήμα κώδικα και ένα τμήμα δεδομένων. Κατά τη χρήση αυτού του μοντέλου, τα δεδομένα και ο κώδικας αντιμετωπίζονται όσο πιο κοντά. Το μοντέλο μέσου υποστηρίζει πολλαπλά τμήματα κώδικα και ένα τμήμα δεδομένων, με όλες τις αναφορές σε τμήματα κώδικα να θεωρούνται μακριά από προεπιλογή και τις αναφορές σε ένα τμήμα δεδομένων να θεωρούνται κοντά. Το συμπαγές μοντέλο υποστηρίζει πολλά τμήματα δεδομένων που χρησιμοποιούν διευθυνσιοδότηση δεδομένων μακριά (μακριά) και ένα τμήμα κώδικα που χρησιμοποιεί κοντινή διεύθυνση (κοντά). Το μεγάλο μοντέλο υποστηρίζει πολλαπλά τμήματα κώδικα και πολλαπλά τμήματα δεδομένων. Από προεπιλογή, όλες οι αναφορές σε κώδικα και δεδομένα θεωρούνται μακριά. Το τεράστιο μοντέλο είναι σχεδόν ισοδύναμο με το μοντέλο της μεγάλης μνήμης.

Μοντέλα μνήμης Το επίπεδο μοντέλο λαμβάνει μια μη τμηματοποιημένη διαμόρφωση προγράμματος και χρησιμοποιείται μόνο σε λειτουργικά συστήματα 32 bit. Αυτό το μοντέλο είναι παρόμοιο με το μικροσκοπικό μοντέλο, καθώς τα δεδομένα και ο κώδικας βρίσκονται σε ένα μόνο τμήμα, αλλά είναι 32-bit. Να αναπτυχθεί ένα πρόγραμμα για το επίπεδο μοντέλο πριν από την οδηγία. μοντέλο flat θα πρέπει να τοποθετήσει μία από τις οδηγίες: . 386, . 486, . 586 ή. 686. Η επιλογή της οδηγίας επιλογής επεξεργαστή καθορίζει το σύνολο των διαθέσιμων οδηγιών κατά τη σύνταξη προγραμμάτων. Το γράμμα p μετά την οδηγία επιλογής επεξεργαστή σημαίνει προστατευμένη λειτουργία λειτουργίας. Η διευθυνσιοδότηση δεδομένων και κώδικα είναι κοντά, με όλες τις διευθύνσεις και τους δείκτες να είναι 32-bit.

Μοντέλα μνήμης. MODEL modifier memory_model, calling_convention, OS_type, stack_parameter Η παράμετρος τροποποιητή χρησιμοποιείται για τον καθορισμό τύπων τμημάτων και μπορεί να λάβει τις ακόλουθες τιμές: χρήση 16 (τα τμήματα του επιλεγμένου μοντέλου χρησιμοποιούνται ως 16-bit) χρήση 32 (χρησιμοποιούνται τμήματα του επιλεγμένου μοντέλου ως 32-bit). Η παράμετρος calling_convention χρησιμοποιείται για τον προσδιορισμό της μεθόδου μετάδοσης παραμέτρων κατά την κλήση μιας διαδικασίας από άλλες γλώσσες, συμπεριλαμβανομένων γλωσσών υψηλού επιπέδου (C++, Pascal). Η παράμετρος μπορεί να λάβει τις ακόλουθες τιμές: C, BASIC, FORTRAN, PASCAL, SYSCALL, STDCALL.

Μοντέλα μνήμης. MODEL modifier memory_model, calling_convention, OS_type, stack_parameter Η παράμετρος OS_type είναι OS_DOS από προεπιλογή και αυτή τη στιγμήαυτή είναι η μόνη υποστηριζόμενη τιμή για αυτήν την παράμετρο. Η παράμετρος stack_parameter έχει οριστεί σε: NEARSTACK (Ο καταχωρητής SS είναι ίσος με DS, οι περιοχές δεδομένων και στοίβας βρίσκονται στο ίδιο φυσικό τμήμα) FARSTACK (ο καταχωρητής SS δεν είναι ίσος με DS, οι περιοχές δεδομένων και στοίβας βρίσκονται σε διαφορετικά φυσικά τμήματα). Η προεπιλεγμένη τιμή είναι NEARSTACK.

Ένα παράδειγμα προγράμματος που δεν κάνει τίποτα. 686 P. MODEL FLAT, STDCALL. ΔΕΔΟΜΕΝΑ. ΚΩΔΙΚΟΣ ΕΝΑΡΞΗ: RET END START RET - εντολή μικροεπεξεργαστή. Διασφαλίζει ότι το πρόγραμμα τερματίζεται σωστά. Το υπόλοιπο πρόγραμμα αφορά τη λειτουργία του μεταφραστή. . 686 P - Επιτρέπονται εντολές προστατευμένης λειτουργίας Pentium 6 (Pentium II). Αυτή η οδηγία επιλέγει το υποστηριζόμενο σύνολο οδηγιών συναρμολόγησης, υποδεικνύοντας το μοντέλο του επεξεργαστή. . MODEL FLAT, stdcall - μοντέλο επίπεδης μνήμης. Αυτό το μοντέλο μνήμης χρησιμοποιείται στο λειτουργικό σύστημα Windows. stdcall - η διαδικασία κλήσης της σύμβασης που χρησιμοποιείται.

Ένα παράδειγμα προγράμματος που δεν κάνει τίποτα. 686 P. MODEL FLAT, STDCALL. ΔΕΔΟΜΕΝΑ. ΚΩΔΙΚΟΣ ΕΝΑΡΞΗΣ: ΕΠΑΝΑΛΗΨΗ ΤΕΛΟΣ START. Το DATA είναι ένα τμήμα προγράμματος που περιέχει δεδομένα. Αυτό το πρόγραμμαδεν χρησιμοποιεί τη στοίβα, άρα το τμήμα. Το STACK λείπει. . Το CODE είναι ένα τμήμα προγράμματος που περιέχει κώδικα. ΕΝΑΡΞΗ - ετικέτα. END START - το τέλος του προγράμματος και ένα μήνυμα στον μεταγλωττιστή ότι η εκτέλεση του προγράμματος πρέπει να ξεκινά με την ετικέτα START. Κάθε πρόγραμμα πρέπει να περιέχει μια οδηγία ΤΕΛΟΣ για να σηματοδοτήσει το τέλος πηγαίος κώδικαςπρογράμματα. Όλες οι γραμμές που ακολουθούν την οδηγία ΤΕΛΟΣ αγνοούνται.Η ετικέτα που καθορίζεται μετά την οδηγία ΤΕΛΟΣ λέει στον μεταφραστή το όνομα της κύριας μονάδας από την οποία ξεκινά η εκτέλεση του προγράμματος. Εάν το πρόγραμμα περιέχει μία ενότητα, η ετικέτα μετά την οδηγία ΤΕΛΟΣ μπορεί να παραλειφθεί.

Μεταφραστές γλώσσας Assembly Μεταφραστής - πρόγραμμα ή τεχνικά μέσα, το οποίο μετατρέπει ένα πρόγραμμα που αντιπροσωπεύεται σε μία από τις γλώσσες προγραμματισμού σε ένα πρόγραμμα στη γλώσσα-στόχο, που ονομάζεται κώδικας αντικειμένου. Εκτός από την υποστήριξη μνημονικών εντολών μηχανής, κάθε μεταφραστής έχει το δικό του σύνολο οδηγιών και εργαλείων μακροεντολών, συχνά ασύμβατα με οτιδήποτε άλλο. Οι κύριοι τύποι μεταφραστών γλωσσών συναρμολόγησης: MASM (Microsoft Assembler), TASM (Borland Turbo Assembler), FASM (Flat Assembler) - ένας ελεύθερα διανεμόμενος assembler πολλαπλών περασμάτων γραμμένος από τον Tomasz Gryshtar (Πολωνός), NASM (Netwide Assembler) - ένα δωρεάν assembler για την αρχιτεκτονική Intel x 86, δημιουργήθηκε από τον Simon Tatham με τον Julian Hall και αυτή τη στιγμή αναπτύσσεται από μια μικρή ομάδα προγραμματιστών στο Source. Σιδηρουργείο. καθαρά.

Src="https://present5.com/presentation/-29367016_63610977/image-15.jpg" alt="Μετάφραση προγράμματος στο Microsoft Visual Studio 2005 1) Δημιουργήστε ένα έργο επιλέγοντας Αρχείο->Νέο- >Μενού έργου Και"> Трансляция программы в Microsoft Visual Studio 2005 1) Создать проект, выбрав меню File->New->Project и указав имя проекта (hello. prj) и тип проекта: Win 32 Project. В дополнительных опциях мастера проекта указать “Empty Project”.!}

Src="https://present5.com/presentation/-29367016_63610977/image-16.jpg" alt="Μετάφραση του προγράμματος στο Microsoft Visual Studio 2005 2) Στο δέντρο του έργου (View->Solution Explorer) Προσθήκη"> Трансляция программы в Microsoft Visual Studio 2005 2) В дереве проекта (View->Solution Explorer) добавить файл, в котором будет содержаться текст программы: Source. Files->Add->New. Item.!}

Μετάφραση του προγράμματος σε Microsoft Visual Studio 2005 3) Επιλέξτε τον τύπο αρχείου Code C++, αλλά καθορίστε το όνομα με την επέκταση. asm:

Μετάφραση του προγράμματος στο Microsoft Visual Studio 2005 5) Ορίστε τις παραμέτρους του μεταγλωττιστή. Κάντε δεξί κλικ στο μενού Custom Build Rules στο αρχείο του έργου...

Μεταφράστε το πρόγραμμα σε Microsoft Visual Studio 2005 και επιλέξτε Microsoft Macro Assembler στο παράθυρο που εμφανίζεται.

Μετάφραση του προγράμματος στο Microsoft Visual Studio 2005 Ελέγξτε με το δεξί κουμπί στο αρχείο hello. asm έργο του μενού Ιδιότητες και εγκαταστήστε Γενικά-> Εργαλείο: Microsoft Macro Assembler.

Src="https://present5.com/presentation/-29367016_63610977/image-22.jpg" alt="Μετάφραση του προγράμματος στο Microsoft Visual Studio 2005 6) Μεταγλωττίστε το αρχείο επιλέγοντας Build->Build hello. prj."> Трансляция программы в Microsoft Visual Studio 2005 6) Откомпилировать файл, выбрав Build->Build hello. prj. 7) Запустить программу, нажав F 5 или выбрав меню Debug->Start Debugging.!}

Προγραμματισμός σε λειτουργικό σύστημα Windows Ο προγραμματισμός στο λειτουργικό σύστημα Windows βασίζεται στη χρήση λειτουργιών API (Διασύνδεση προγράμματος εφαρμογής, δηλ. διεπαφή εφαρμογής λογισμικού). Ο αριθμός τους φτάνει τις 2000. Το πρόγραμμα των Windows αποτελείται σε μεγάλο βαθμό από τέτοιες κλήσεις. Όλες οι αλληλεπιδράσεις με εξωτερικές συσκευέςκαι οι πόροι του λειτουργικού συστήματος εμφανίζονται, κατά κανόνα, μέσω τέτοιων λειτουργιών. χειρουργείο Σύστημα Windowsχρησιμοποιεί ένα μοντέλο επίπεδης μνήμης. Η διεύθυνση οποιουδήποτε κελιού μνήμης θα καθοριστεί από τα περιεχόμενα ενός καταχωρητή 32 bit. Υπάρχουν 3 τύποι δομών προγραμμάτων για τα Windows: διάλογος (το κύριο παράθυρο είναι διάλογος), δομή κονσόλας ή χωρίς παράθυρο, κλασική δομή (με παράθυρο, πλαίσιο).

Κλήση Λειτουργίες Windows API Στο αρχείο βοήθειας, οποιαδήποτε συνάρτηση API παρουσιάζεται ως τύπος function_name (FA 1, FA 2, FA 3) Τύπος – τύπος τιμής επιστροφής. Φαξ – μια λίστα επίσημων ορισμάτων με τη σειρά που εμφανίζονται. Για παράδειγμα, int Message. Box(HWND h. Wnd, LPCTSTR lp. Text, LPCTSTR lp. Caption, UINT u. Type); Αυτή η λειτουργίαεμφανίζει ένα παράθυρο με ένα μήνυμα και ένα κουμπί εξόδου (ή κουμπιά). Σημασία των παραμέτρων: h. Το Wnd είναι ένας περιγραφέας του παραθύρου στο οποίο θα εμφανιστεί το παράθυρο μηνύματος, lp. Κείμενο - κείμενο που θα εμφανιστεί στο παράθυρο, λπ. Λεζάντα - κείμενο στον τίτλο του παραθύρου, u. Τύπος - τύπος παραθύρου· συγκεκριμένα, μπορείτε να προσδιορίσετε τον αριθμό των κουμπιών εξόδου.

Κλήση λειτουργιών του Windows API int Message. Box(HWND h. Wnd, LPCTSTR lp. Text, LPCTSTR lp. Caption, UINT u. Type); Σχεδόν όλες οι παράμετροι συνάρτησης API είναι στην πραγματικότητα ακέραιοι αριθμοί 32 bit: το HWND είναι ένας ακέραιος αριθμός 32 bit, το LPCTSTR είναι ένας δείκτης 32 bit σε μια συμβολοσειρά, το UINT είναι ένας ακέραιος αριθμός 32 bit. Το επίθημα "A" προστίθεται συχνά στο όνομα της συνάρτησης για να μετακινηθεί σε νεότερες εκδόσεις της συνάρτησης.

Κλήση λειτουργιών του Windows API int Message. Box(HWND h. Wnd, LPCTSTR lp. Text, LPCTSTR lp. Caption, UINT u. Type); Όταν χρησιμοποιείτε το MASM, πρέπει να προσθέσετε το @N N στο τέλος του ονόματος - τον αριθμό των byte που καταλαμβάνουν τα περασμένα ορίσματα στη στοίβα. Για συναρτήσεις Win 32 API, αυτός ο αριθμός μπορεί να οριστεί ως ο αριθμός των ορισμάτων n πολλαπλασιασμένος επί 4 (byte σε κάθε όρισμα): N=4*n. Για να καλέσετε μια συνάρτηση, χρησιμοποιήστε την οδηγία CALL του assembler. Σε αυτήν την περίπτωση, όλα τα ορίσματα συνάρτησης μεταβιβάζονται σε αυτήν μέσω της στοίβας (εντολή PUSH). Κατεύθυνση μετάδοσης ορισμάτων: ΑΡΙΣΤΕΡΑ ΠΡΟΣ ΔΕΞΙΑ - ΚΑΤΩ ΠΑΝΩ. Το όρισμα u θα προωθηθεί πρώτα στη στοίβα. Τύπος. Η κλήση προς την καθορισμένη λειτουργία θα μοιάζει με αυτό: Μήνυμα ΚΛΗΣΗΣ. Κουτί. Α@16

Κλήση λειτουργιών του Windows API int Message. Box(HWND h. Wnd, LPCTSTR lp. Text, LPCTSTR lp. Caption, UINT u. Type); Το αποτέλεσμα της εκτέλεσης οποιασδήποτε συνάρτησης API είναι συνήθως ένας ακέραιος που επιστρέφεται στον καταχωρητή EAX. Η οδηγία OFFSET αντιπροσωπεύει μια "μετατόπιση σε ένα τμήμα" ή, μεταφρασμένη σε γλωσσικούς όρους υψηλού επιπέδου, έναν "δείκτη" στην αρχή μιας γραμμής. Η οδηγία EQU, όπως το #define στο SI, ορίζει μια σταθερά. Η οδηγία EXTERN λέει στον μεταφραστή ότι η συνάρτηση ή το αναγνωριστικό είναι εξωτερικό σε αυτήν την ενότητα.

Παράδειγμα προγράμματος "Γεια σε όλους!" . 686 P. MODEL FLAT, STDCALL. STACK 4096. DATA MB_OK EQU 0 STR 1 DB "Το πρώτο μου πρόγραμμα", 0 STR 2 DB "Γεια σε όλους!", 0 HW DD ? ΕΞΩΤΕΡΙΚΟ Μήνυμα. Κουτί. Α@16: ΚΟΝΤΑ. ΚΩΔΙΚΟΣ ΕΝΑΡΞΗΣ: PUSH MB_OK PUSH OFFSET STR 1 PUSH OFFSET STR 2 PUSH HW CALL Μήνυμα. Κουτί. A@16 ΕΠΑΝΑΛΗΨΗ ΤΕΛΟΣ ΕΝΑΡΞΗ

Η οδηγία INVOKE Ο μεταφραστής γλώσσας MASM σάς επιτρέπει επίσης να απλοποιήσετε τις κλήσεις συναρτήσεων χρησιμοποιώντας ένα εργαλείο μακροεντολής - την οδηγία INVOKE: συνάρτηση INVOKE, παράμετρος1, παράμετρος2, ... Δεν χρειάζεται να προσθέσετε @16 στην κλήση συνάρτησης. Οι παράμετροι γράφονται ακριβώς με τη σειρά που δίνονται στην περιγραφή της συνάρτησης. Με τη μακροεντολή του μεταφραστή, οι παράμετροι τοποθετούνται στη στοίβα. Για να χρησιμοποιήσετε την οδηγία INVOKE, πρέπει να έχετε μια περιγραφή του πρωτοτύπου λειτουργίας χρησιμοποιώντας την οδηγία PROTO με τη μορφή: Μήνυμα. Κουτί. A PROTO: DWORD, : DWORD Εάν ένα πρόγραμμα χρησιμοποιεί πολλές λειτουργίες Win 32 API, συνιστάται να χρησιμοποιήσετε την οδηγία include C: masm 32includeuser 32. inc

Θέμα 2.5 Βασικές αρχές προγραμματισμού επεξεργαστή

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

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

συμβολική γλώσσαείναι μια γλώσσα στην οποία κάθε έκφραση αντιστοιχεί ακριβώς σε μία εντολή μηχανής.

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

Η γλώσσα Assembly έχει πολλά χαρακτηριστικά που τη διακρίνουν από τις γλώσσες υψηλού επιπέδου:

1. Αυτή είναι μια αντιστοιχία ένας προς έναν μεταξύ των δηλώσεων γλώσσας συγκρότησης και των οδηγιών μηχανής.

2. Ένας προγραμματιστής γλώσσας συναρμολόγησης έχει πρόσβαση σε όλα τα αντικείμενα και τις οδηγίες που υπάρχουν στο μηχάνημα προορισμού.

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



Καλύτερη κατανόηση της αρχιτεκτονικής των Η/Υ και πιο ικανή χρήση των υπολογιστών.

Να αναπτύξει πιο ορθολογικές δομές αλγορίθμων για προγράμματα επίλυσης εφαρμοσμένων προβλημάτων.

Δυνατότητα προβολής και διόρθωσης εκτελέσιμων προγραμμάτων με την επέκταση .exe και .com, που έχουν μεταγλωττιστεί από οποιεσδήποτε γλώσσες υψηλού επιπέδου, σε περίπτωση απώλειας των προγραμμάτων πηγής (καλώντας τα καθορισμένα προγράμματα στο πρόγραμμα εντοπισμού σφαλμάτων του προγράμματος DEBUG και απομεταγλώττιση της οθόνης τους στη συναρμολόγηση Γλώσσα);

Σύνταξη προγραμμάτων για την επίλυση των πιο κρίσιμων προβλημάτων (ένα πρόγραμμα γραμμένο σε γλώσσα προσανατολισμένη στη μηχανή είναι συνήθως πιο αποτελεσματικό - συντομότερο και ταχύτερο κατά 30-60 τοις εκατό των προγραμμάτων που λαμβάνονται ως αποτέλεσμα μετάφρασης από γλώσσες υψηλού επιπέδου)

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

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

Το αλφάβητο της γλώσσας συναρμολόγησης αποτελείται από χαρακτήρες ASCII.

Οι αριθμοί είναι μόνο ακέραιοι. Υπάρχουν:

Οι δυαδικοί αριθμοί τελειώνουν με το γράμμα Β.

Δεκαδικοί αριθμοί που τελειώνουν με το γράμμα D.

Οι δεκαεξαδικοί αριθμοί τελειώνουν με το γράμμα H.

ΕΜΒΟΛΟ, μητρώα, παρουσίαση στοιχείων

Για μια συγκεκριμένη σειρά MPs, χρησιμοποιείται μια μεμονωμένη γλώσσα προγραμματισμού - γλώσσα assembly.

Η γλώσσα συναρμολόγησης καταλαμβάνει μια ενδιάμεση θέση μεταξύ των κωδικών μηχανής και των γλωσσών υψηλού επιπέδου. Ο προγραμματισμός σε αυτή τη γλώσσα είναι ευκολότερος. Ένα πρόγραμμα σε γλώσσα assembly χρησιμοποιεί πιο αποτελεσματικά τις δυνατότητες μιας συγκεκριμένης μηχανής (ακριβέστερα, ενός MP) από ένα πρόγραμμα σε μια γλώσσα υψηλού επιπέδου (που είναι πιο απλό για έναν προγραμματιστή παρά για έναν assembler). Ας δούμε τις βασικές αρχές προγραμματισμού σε γλώσσες προσανατολισμένες στη μηχανή χρησιμοποιώντας το παράδειγμα της γλώσσας assembly για το MP KR580VM80. Μια γενική μεθοδολογία χρησιμοποιείται για τον προγραμματισμό στη γλώσσα. Συγκεκριμένες τεχνικές τεχνικές για την εγγραφή προγραμμάτων συνδέονται με τα χαρακτηριστικά της αρχιτεκτονικής και του συστήματος εντολών του MP-στόχου.

Μοντέλο λογισμικούσύστημα μικροεπεξεργαστή που βασίζεται στο MP KR580VM80

Μοντέλο λογισμικού του MPS σύμφωνα με το σχήμα 1

Μνήμη θυρών MP

μικρό Ζ ΜΕΤΑ ΧΡΙΣΤΟΝ. Π ντο

Εικόνα 1

Από την πλευρά του προγραμματιστή, το MP KR580VM80 έχει τους ακόλουθους καταχωρητές προσβάσιμους από το πρόγραμμα.

ΕΝΑ– Καταχωρητής συσσωρευτή 8 bit. Είναι το κύριο μητρώο του βουλευτή. Οποιαδήποτε λειτουργία εκτελείται σε μια ALU περιλαμβάνει την τοποθέτηση ενός από τους τελεστές προς επεξεργασία στον συσσωρευτή. Το αποτέλεσμα μιας λειτουργίας στο ALU αποθηκεύεται επίσης συνήθως στο A.

Β, Γ, Δ, Ε, Η, Λ– Μητρώα γενικού σκοπού 8 bit (GPR). Εσωτερική μνήμηβουλευτής. Σχεδιασμένο για αποθήκευση επεξεργασμένων πληροφοριών, καθώς και των αποτελεσμάτων της λειτουργίας. Κατά την επεξεργασία λέξεων 16-bit, οι καταχωρητές σχηματίζουν ζεύγη BC, DE, HL και ο διπλός καταχωρητής ονομάζεται πρώτο γράμμα - B, D, H. Σε ένα ζεύγος καταχωρητών, ο υψηλότερος είναι ο πρώτος καταχωρητής. Οι καταχωρητές H και L έχουν μια ειδική ιδιότητα, που χρησιμοποιείται τόσο για την αποθήκευση δεδομένων όσο και για την αποθήκευση διευθύνσεων 16-bit κυψελών RAM.

FL– καταχωρητής σημαίας (καταχωρητής σήμανσης) καταχωρητής 8 bit στον οποίο αποθηκεύονται πέντε σημάδια του αποτελέσματος της εκτέλεσης αριθμητικών και λογικών πράξεων στο MP. Μορφή FL σύμφωνα με την εικόνα

Bit C (CY - μεταφορά) - μεταφορά, ορίζεται στο 1 εάν υπήρχε μεταφορά από την υψηλή τάξη του byte κατά την εκτέλεση αριθμητικών πράξεων.

Bit P (ισοτιμία) – ισοτιμία, ορίζεται σε 1 εάν ο αριθμός των μονάδων στα bit του αποτελέσματος είναι άρτιος.

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

Bit Z (μηδέν) – ορίζεται σε 1 εάν το αποτέλεσμα της λειτουργίας είναι 0.

Bit S (σύμβολο) – ορίζεται σε 1 εάν το αποτέλεσμα είναι αρνητικό και σε 0 εάν το αποτέλεσμα είναι θετικό.

SP– δείκτης στοίβας, ένας καταχωρητής 16-bit, σχεδιασμένος να αποθηκεύει τη διεύθυνση του κελιού μνήμης όπου γράφτηκε το τελευταίο byte που εισήχθη στη στοίβα.

RS– μετρητής προγράμματος (program counter), καταχωρητής 16 bit, σχεδιασμένος να αποθηκεύει τη διεύθυνση της επόμενης εντολής που θα εκτελεστεί. Τα περιεχόμενα του μετρητή προγράμματος προσαυξάνονται αυτόματα κατά 1 αμέσως μετά την ανάκτηση του επόμενου byte εντολών.

Στην αρχική περιοχή μνήμης της διεύθυνσης 0000Н – 07FF υπάρχει πρόγραμμα ελέγχουκαι προγράμματα επίδειξης. Αυτή είναι η περιοχή ROM.

0800 – 0AFF - περιοχή διεύθυνσης για την καταγραφή των υπό μελέτη προγραμμάτων. (ΕΜΒΟΛΟ).

0В00 – 0ВВ0 - περιοχή διεύθυνσης για εγγραφή δεδομένων. (ΕΜΒΟΛΟ).

0ВВ0 – διεύθυνση έναρξης της στοίβας. (ΕΜΒΟΛΟ).

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

Μορφή δεδομένων και δομή εντολών της γλώσσας assembly

Η μνήμη του MP KR580VM80 είναι ένας πίνακας λέξεων 8 bit που ονομάζονται bytes. Κάθε byte έχει τη δική του διεύθυνση 16 bit, η οποία καθορίζει τη θέση του στην ακολουθία των κελιών μνήμης. Το MP μπορεί να διευθύνει 65536 byte μνήμης, τα οποία μπορούν να περιέχονται τόσο στη ROM όσο και στη RAM.

Μορφή δεδομένων

Τα δεδομένα αποθηκεύονται στη μνήμη ως λέξεις 8-bit:

D7 D6 D5 D4 D3 D2 D1 D0

Το λιγότερο σημαντικό bit είναι το bit 0, το πιο σημαντικό bit είναι το bit 7.

Μια εντολή χαρακτηρίζεται από τη μορφή της, δηλαδή τον αριθμό των bit που διατίθενται για αυτήν, τα οποία χωρίζονται byte-byte σε ορισμένα λειτουργικά πεδία.

Μορφή εντολών

Οι εντολές MP KR580VM80 έχουν μορφή ενός, δύο ή τριών byte. Οι εντολές πολλών byte πρέπει να τοποθετούνται σε γειτονικές γλώσσες. Η μορφή εντολής εξαρτάται από τις ιδιαιτερότητες της λειτουργίας που εκτελείται.

Το πρώτο byte της εντολής περιέχει τον κωδικό λειτουργίας, γραμμένο σε μνημονική μορφή.

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

Το δεύτερο και το τρίτο byte μπορεί να περιέχουν δεδομένα στα οποία εκτελούνται οι λειτουργίες ή διευθύνσεις που υποδεικνύουν τη θέση των δεδομένων. Τα δεδομένα στα οποία εκτελούνται οι ενέργειες ονομάζονται τελεστές.

Μορφή εντολής ενός byte σύμφωνα με το σχήμα 2

Εικόνα 4

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

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


Μέθοδοι αντιμετώπισης

Όλοι οι κωδικοί τελεστών (είσοδος και έξοδος) πρέπει να βρίσκονται κάπου. Μπορούν να βρίσκονται στα εσωτερικά μητρώα του MP (το πιο βολικό και γρήγορη επιλογή). Μπορούν να βρίσκονται στη μνήμη του συστήματος (η πιο συνηθισμένη επιλογή). Τέλος, μπορούν να εντοπιστούν σε συσκευές I/O (η πιο σπάνια περίπτωση). Η θέση των τελεστών καθορίζεται από τον κώδικα εντολών. Υπάρχει διαφορετικές μεθόδους, με το οποίο ο κώδικας εντολών μπορεί να καθορίσει πού να λάβει τον τελεστή εισόδου και πού να τοποθετήσει τον τελεστή εξόδου. Αυτές οι μέθοδοι ονομάζονται μέθοδοι διευθυνσιοδότησης.

Για το MP KR580VM80, υπάρχουν οι ακόλουθες μέθοδοι διευθυνσιοδότησης:

Απευθείας;

Κανω ΕΓΓΡΑΦΗ;

Εμμεσος;

Στοιβάζονται.

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

Ευθεία Η (γνωστή και ως απόλυτη) διευθυνσιοδότηση προϋποθέτει ότι ο τελεστής (είσοδος ή έξοδος) βρίσκεται στη μνήμη στη διεύθυνση, ο κωδικός της οποίας βρίσκεται μέσα στο πρόγραμμα αμέσως μετά τον κώδικα εντολής. Χρησιμοποιείται σε εντολές τριών byte.

Κανω ΕΓΓΡΑΦΗ Η διευθυνσιοδότηση προϋποθέτει ότι ο τελεστής (είσοδος ή έξοδος) βρίσκεται στον εσωτερικό καταχωρητή του MP. Χρησιμοποιείται σε εντολές ενός byte

Εμμεσος Η (σιωπηρή) διευθυνσιοδότηση προϋποθέτει ότι ο εσωτερικός καταχωρητής του MP περιέχει όχι τον ίδιο τον τελεστή, αλλά τη διεύθυνσή του στη μνήμη.

Σωρός Η διευθυνσιοδότηση προϋποθέτει ότι η εντολή δεν περιέχει διεύθυνση. Διεύθυνση κελιών μνήμης χρησιμοποιώντας τα περιεχόμενα του καταχωρητή SP 16-bit (δείκτης στοίβας).

Σύστημα εντολών

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

Διακρίνονται οι ακόλουθες ομάδες εντολών:

Μετάδοση δεδομένων;

Αριθμητική;

Σπαζοκεφαλιά;

Εντολές μετάβασης.

Εντολές εισόδου/εξόδου, ελέγχου και στοίβας.


Σύμβολα και συντομογραφίες που χρησιμοποιούνται κατά την περιγραφή εντολών και τη σύνθεση προγραμμάτων

Σύμβολο Μείωση
ADDR Διεύθυνση 16-bit
ΔΕΔΟΜΕΝΑ Δεδομένα 8 bit
ΣΤΟΙΧΕΙΑ 16 Δεδομένα 16 bit
ΛΙΜΑΝΙ Διεύθυνση συσκευής I/O 8 bit
BYTE 2 Δεύτερο byte της εντολής
BYTE 3 Τρίτο byte εντολής
R, R1, R2 Ένα από τα μητρώα: A, B, C, D, E, H, L
R.P. Ένα από τα ζεύγη καταχωρητών: B - καθορίζει το ζεύγος BC. D - καθορίζει ένα ζεύγος DE. H – καθορίζει το ζεύγος HL
RH Πρώτη εγγραφή του ζεύγους
R.L. Δεύτερος καταχωρητής του ζεύγους
Λ Λογικός πολλαπλασιασμός
V Λογική προσθήκη
Προσθήκη modulo δύο
Μ Ένα κελί μνήμης του οποίου η διεύθυνση καθορίζει τα περιεχόμενα του ζεύγους καταχωρητών HL, δηλαδή M = (HL)



Μπλουζα