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

Εισαγωγή.

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

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

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

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

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

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

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

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

) χρησιμοποιείται μνημονικό

Αφαιρέσεις (

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

Τμήματα (

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Πεδίο κωδικού συναλλαγής.

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

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

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

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

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

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

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

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

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

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

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

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

μπορεί να μην καταγραφεί). Αν το πρώτο ψηφίο του δεκαεξαδικού αριθμού είναι Α, Β, Γ,

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

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

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

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

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

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

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

Τα πρώτα γράμματα Β

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

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

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

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

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

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

● εκφράσεις,

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

Ορισμός λέξης), και αργότερα εισήχθη Εναλλακτική επιλογη.

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

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

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

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

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

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

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

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

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

προστίθενται επιθήματα σε κάθε opcode: επίθημα

Για τον τύπο

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

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

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

αντίστοιχα.

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

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

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

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

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

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

Στη γλώσσα assembly, μπορούν να διακριθούν δύο κύριοι τύποι εντολών:

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

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

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

.

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

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

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

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

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

μακροεντολή

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

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

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

Υπάρχουν τρία μέρη στην παραπάνω δομή ορισμού μακροεντολών:

● κεφαλίδα

μακροεντολή που περιέχει το όνομα

Ψευτοεντολή

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

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

● ομάδα

αποφοίτηση

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

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

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

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

Όταν ο 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 στο δεύτερο πέρασμα.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Άρθρα αφιερωμένα στη γλώσσα 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 μεταξύ των προγραμματιστών.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

^16 προσαρμοσμένα μητρώα.

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

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

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

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

έξι καταχωρητές τμημάτων: 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 (Accumulator register) - συσσωρευτής.
Χρησιμοποιείται για την αποθήκευση ενδιάμεσων δεδομένων. Σε ορισμένες εντολές, η χρήση αυτού του μητρώου είναι υποχρεωτική.

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 (pop) από τη στοίβα:

pop DS
pop AX

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

^ Δομή προγράμματος συνέλευσης

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

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

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

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

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

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

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

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

Ρύζι. 5. Μορφή πρότασης Assembler

Ρύζι. 6. Μορφοποίηση οδηγιών

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

Σε αυτά τα σχέδια:

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

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

Ο κωδικός λειτουργίας (COP) και η οδηγία είναι μνημονικοί προσδιορισμοί της αντίστοιχης οδηγίας μηχανής, μακροεντολής ή οδηγίας μεταφραστή.

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

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

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

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

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

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

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

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

Οι μάρκες είναι:

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

^ Εντολές γλώσσας συναρμολόγησης.

Οι εντολές 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|

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

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

^ Περίγραμμα εντολών:

Σκοπός:

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

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

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

Η ετικέτα είναι κοντά - τα περιεχόμενα του δείκτη εντολής 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).

ανάλογα με το αποτέλεσμα, ορίστε σημαίες, μην αλλάζετε τελεστές1 και τελεστές2 (δηλαδή μην αποθηκεύετε το αποτέλεσμα).

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

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

Εγγραφή ή καταχωρημένη μνήμη:

|001110dw|modreg/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|

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

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

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

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

^ Περίγραμμα εντολών:

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

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

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

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

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

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

εάν η ελεγμένη συνθήκη

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

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

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

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

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

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

Μοντέλα μνήμης Πριν δηλώσετε τμήματα, πρέπει να καθορίσετε το μοντέλο μνήμης χρησιμοποιώντας μια οδηγία. MODEL modifier memory_model, calling_convention, OS_type, stack_parameter Βασικά μοντέλα μνήμης γλώσσας συναρμολόγησης: Μοντέλο μνήμης Διευθυνσιοδότηση κώδικα Διευθυνσιοδότηση δεδομένων λειτουργικό σύστημαΗ παρεμβολή κώδικα και δεδομένων Επιτρέπεται ΜΙΚΡΟ ΚΟΝΤΑ στο 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_param έχει οριστεί σε: 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. Κάθε πρόγραμμα πρέπει να περιέχει μια οδηγία ΤΕΛΟΣ που σηματοδοτεί το τέλος πηγαίος κώδικαςπρογράμματα. Όλες οι γραμμές που ακολουθούν την οδηγία END αγνοούνται.Η ετικέτα μετά την οδηγία END λέει στον μεταγλωττιστή το όνομα της κύριας μονάδας από την οποία ξεκινά η εκτέλεση του προγράμματος. Εάν το πρόγραμμα περιέχει μία ενότητα, η ετικέτα μετά την οδηγία ΤΕΛΟΣ μπορεί να παραλειφθεί.

Μεταφραστές γλώσσας συναρμολόγησης Ο μεταφραστής είναι ένα πρόγραμμα ή τεχνικά μέσα A που μετατρέπει ένα πρόγραμμα σε μια από τις γλώσσες προγραμματισμού σε ένα πρόγραμμα στη γλώσσα στόχο, που ονομάζεται κώδικας αντικειμένου. Εκτός από την υποστήριξη μνημονικών εντολών μηχανής, κάθε μεταφραστής έχει το δικό του σύνολο οδηγιών και μακροεντολών, συχνά ασύμβατες με οτιδήποτε άλλο. Οι κύριοι τύποι μεταφραστών γλώσσας συναρμολόγησης είναι: MASM (Microsoft Assembler), TASM (Borland Turbo Assembler), FASM (Flat Assembler) - ένας ελεύθερα διανεμημένος assembler πολλαπλών περασμάτων γραμμένος από τον Tomasz Gryshtar (Πολωνός), NASM (Netwide Assembler) - a Ο δωρεάν 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) Τύπος – τύπος τιμής επιστροφής. FAX – λίστα επίσημων επιχειρημάτων με τη σειρά τους. Για παράδειγμα, int Message. Πλαίσιο (HWND h. Wnd, LPCTSTR lp. Text, LPCTSTR lp. Caption, UINT u. Type); Αυτή η λειτουργίαεμφανίζει ένα παράθυρο με μήνυμα και κουμπί(α) εξόδου. Σημασία των παραμέτρων: h. Wnd - λαβή στο παράθυρο στο οποίο θα εμφανιστεί το παράθυρο μηνύματος, lp. Κείμενο - το κείμενο που θα εμφανιστεί στο παράθυρο, lp. Λεζάντα - κείμενο στον τίτλο του παραθύρου, u. Τύπος - τύπος παραθύρου, συγκεκριμένα, μπορείτε να καθορίσετε τον αριθμό των κουμπιών εξόδου.

Κλήση λειτουργιών API των Windows int Message. Πλαίσιο (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" προστίθεται συχνά στο όνομα των συναρτήσεων για μετάβαση σε νεότερες εκδόσεις συναρτήσεων.

Κλήση λειτουργιών API των Windows int Message. Πλαίσιο (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 θα προωθηθεί πρώτα στη στοίβα. τύπος. Η κλήση της καθορισμένης συνάρτησης θα μοιάζει με αυτό: Μήνυμα ΚΛΗΣΗΣ. κουτί. [email προστατευμένο]

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

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

Η οδηγία INVOKE Ο μεταφραστής γλώσσας MASM καθιστά επίσης δυνατή την απλοποίηση της κλήσης συνάρτησης χρησιμοποιώντας ένα εργαλείο μακροεντολής - την οδηγία INVOKE: συνάρτηση INVOKE, parameter1, parameter2, ... Δεν χρειάζεται να προσθέσετε @16 στην κλήση συνάρτησης. οι παράμετροι γράφονται ακριβώς με τη σειρά που δίνονται στην περιγραφή της συνάρτησης. Οι μακροεντολές μεταφραστή ωθούν τις παραμέτρους στη στοίβα. για να χρησιμοποιήσετε την οδηγία INVOKE, πρέπει να έχετε μια περιγραφή του πρωτοτύπου λειτουργίας χρησιμοποιώντας την οδηγία PROTO με τη μορφή: Μήνυμα. κουτί. A PROTO: DWORD, : DWORD

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

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

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

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

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

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

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

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

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



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

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

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

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

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

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

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

Οι αριθμοί είναι μόνο ακέραιοι. Διακρίνω:

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

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

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

ΕΜΒΟΛΟ, μητρώα, αναπαράσταση δεδομένων

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

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

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

Το μοντέλο προγράμματος του MPS σύμφωνα με το σχήμα 1

Μνήμη θυρών MP

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

Εικόνα 1

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

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

Β, Γ, Δ, Ε, Η, Λ– Καταχωρητές γενικού σκοπού 8 bit (RON). Εσωτερική μνήμηβουλευτής. Σχεδιασμένο για την αποθήκευση των επεξεργασμένων πληροφοριών, καθώς και των αποτελεσμάτων της λειτουργίας. Κατά την επεξεργασία λέξεων 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 εναλλασσόμενου ρεύματος είναι μια πρόσθετη μεταφορά, σχεδιασμένη να αποθηκεύει την τιμή μεταφοράς από το κατώτερο τετράδιο του αποτελέσματος.

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

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

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

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

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

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

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

0BB0 είναι η αρχική διεύθυνση της στοίβας. (ΕΜΒΟΛΟ).

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

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

Το Memory 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 πρέπει να τοποθετούνται σε γειτονικά PL. Η μορφή της εντολής εξαρτάται από τις ιδιαιτερότητες της λειτουργίας που εκτελείται.

Το πρώτο byte της εντολής περιέχει τον opcode γραμμένο σε μνημονική μορφή.

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

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

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

Εικόνα 4

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

Πριν από την εκτέλεση, το πρόγραμμα πηγής μεταφράζεται χρησιμοποιώντας ένα πρόγραμμα μετάφρασης, που ονομάζεται 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 (συσκευές I/O)
BYTE 2 Δεύτερο byte εντολής
BYTE 3 Τρίτο byte εντολής
R, R1, R2 Ένα από τα μητρώα: A, B, C, D, E, H, L
RP Ένα από τα ζεύγη καταχωρητών: B - ορίζει ένα ζευγάρι αεροσκαφών. D - ορίζει ένα ζεύγος DE. H - καθορίζει ένα ζεύγος HL
RH Πρώτη εγγραφή του ζεύγους
RL Δεύτερος καταχωρητής του ζεύγους
Λ Boolean πολλαπλασιασμός
V Boolean προσθήκη
Modulo δύο προσθήκη
Μ Κυψέλη μνήμης του οποίου η διεύθυνση καθορίζει τα περιεχόμενα του ζεύγους καταχωρητών HL, δηλαδή M = (HL)



Μπλουζα