Το πρόγραμμα στη γλώσσα assembly. Γενικά χαρακτηριστικά του συστήματος εντολών της γλώσσας Assembler για IBM-PC (βασικό σύνολο εντολών, βασικές μέθοδοι διευθυνσιοδότησης τελεστών). Δομή προγράμματος στη γλώσσα Assembler. Εντολές γλώσσας συναρμολόγησης

Γενικές πληροφορίεςσχετικά με τη γλώσσα assembly

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

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

Τα συμβολικά ονόματα που εισάγονται κατά τον προγραμματισμό σε γλώσσα συναρμολόγησης συνήθως αντικατοπτρίζουν τη σημασιολογία του προγράμματος και η συντομογραφία των εντολών αντικατοπτρίζει την κύρια λειτουργία τους. Για παράδειγμα: PARAM - παράμετρος, TABLE - πίνακας, MASK - mask, ADD - πρόσθεση, SUB - αφαίρεση κ.λπ. κλπ. Τέτοια ονόματα είναι εύκολο να τα θυμάται ένας προγραμματιστής.

Για προγραμματισμό σε γλώσσα assembly, είναι απαραίτητο να έχετε πολύπλοκα εργαλεία από ό,τι για προγραμματισμό στη γλώσσα μηχανής: χρειάζεστε συστήματα υπολογιστών που βασίζονται σε μικροϋπολογιστή ή υπολογιστή με σετ περιφερειακές συσκευές(αλφαριθμητικό πληκτρολόγιο, απεικόνιση χαρακτήρων, float drive και συσκευή εκτύπωσης), καθώς και συστήματα μόνιμης ή διασταυρούμενης προγραμματισμού για τους απαιτούμενους τύπους μικροεπεξεργαστών. Η γλώσσα assembly σάς επιτρέπει να γράφετε και να διορθώνετε αποτελεσματικά πολύ πιο σύνθετα προγράμματα από τη γλώσσα μηχανής (έως 1 - 4 KB).

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

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

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

Χρησιμοποιώντας τη γλώσσα assembly, ο προγραμματιστής μπορεί να ορίσει τις ακόλουθες παραμέτρους:

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

μια τυπική μορφή για γραμμές ενός προγράμματος γραμμένου σε γλώσσα assembly.

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

Μορφή για τον καθορισμό σταθερών χαρακτήρων και σταθερών ακεραίων σε διάφορα συστήματα αριθμών.

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

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

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

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

Κάθε εντολή μηχανής αποτελείται από δύο μέρη:

· Χειρουργείο - καθορισμός του «τι να κάνουμε».

· τελεστής - ορισμός αντικειμένων επεξεργασίας, «με τι να κάνουμε».

Η εντολή μηχανής μικροεπεξεργαστή, γραμμένη σε γλώσσα συναρμολόγησης, είναι μία γραμμή με την ακόλουθη συντακτική μορφή:

ετικέτα εντολή/οδηγία τελεστών ;σχόλια

Σε αυτήν την περίπτωση, το απαιτούμενο πεδίο στη γραμμή είναι μια εντολή ή οδηγία.

Η ετικέτα, η εντολή/οδηγία και οι τελεστές (εάν υπάρχουν) διαχωρίζονται με τουλάχιστον έναν χαρακτήρα διαστήματος ή tab.

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

Από προεπιλογή, η γλώσσα assembly δεν κάνει διάκριση μεταξύ κεφαλαίων και πεζών γραμμάτων κατά τη σύνταξη εντολών ή οδηγιών.

Απευθείας διεύθυνση: Η ενεργή διεύθυνση καθορίζεται απευθείας από το πεδίο μετατόπισης της εντολής του μηχανήματος, το οποίο μπορεί να έχει μέγεθος 8, 16 ή 32 bit.

mov eax, sum ; eax = άθροισμα

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

Έμμεση διεύθυνσημε τη σειρά του έχει τους εξής τύπους:

· Έμμεση βασική διεύθυνση (μητρώο).

· Έμμεση βασική (μητρώο) διευθυνσιοδότηση με μετατόπιση.

· Έμμεση διευθυνσιοδότηση ευρετηρίου.

· Έμμεση βασική διευθυνσιοδότηση ευρετηρίου.

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

mov eax, ; eax = *esi; *τιμή esi στη διεύθυνση esi

Εισαγωγή.

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

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

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

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

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

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

Κύρια χαρακτηριστικά του 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

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

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

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

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

Στη συνέχεια προστίθεται ένα ασήμαντο 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.

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

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

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

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

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

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

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

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

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



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

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

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

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

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

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

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

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

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

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

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

RAM, μητρώα, παρουσίαση δεδομένων

Για μια συγκεκριμένη σειρά 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)

1. Αρχιτεκτονική Η/Υ……………………………………………………………………………………5

    1.1. Μητρώα.

    1.1.1 Μητρώα γενικής χρήσης.

1.1.2. Μητρώα τμημάτων

1.1.3 Μητρώο σημαίας

1.2. Οργάνωση μνήμης.

1.3. Παρουσίαση δεδομένων.

1.3.1 Τύποι δεδομένων

1.3.2 Αναπαράσταση χαρακτήρων και συμβολοσειρών

2. Δηλώσεις προγράμματος στον assembler ………………………………………

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

2.2. Τρόποι διευθυνσιοδότησης και μορφές εντολών μηχανής

3. Ψευδοχειριστές…………………………………………………………….

3.1 Οδηγίες για τον ορισμό δεδομένων

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

3.2.1 Τμήματα προγράμματος. αναλάβουν οδηγία

3.2.3 Απλοποιημένη οδηγία κατάτμησης

4. Συναρμολόγηση και σύνθεση του προγράμματος …………………………….

5. Εντολές μεταφοράς δεδομένων……………………………………………….

    5.1 Γενικές εντολές

    5.2 Εντολές στοίβας

5.3 Εντολές I/O

5.4 Εντολές προώθησης διευθύνσεων

5.5 Επισήμανση εντολών προώθησης

6. Αριθμητικές εντολές……………………………………………….

    6.1 Αριθμητικές πράξεις σε δυαδικούς ακέραιους αριθμούς

6.1.1 Πρόσθεση και αφαίρεση

6.1.2 Εντολές για αύξηση και μείωση του δέκτη κατά ένα

6.2 Πολλαπλασιασμός και διαίρεση

6.3 Αλλαγή πινακίδας

7. Λογικές πράξεις…………………………………………….

8. Βάρδιες και κυκλικές βάρδιες……………………………………………………………

9. Πράξεις συμβολοσειράς……………………………………………………….

10. Λογική και οργάνωση προγραμμάτων………………………………………

10.1 Άλματα χωρίς όρους

10.2 Άλματα υπό όρους

10.4 Διαδικασίες στη γλώσσα assembly

10.5 INT Διακοπές

10.6 Λογισμικό συστήματος

10.6.1.1 Ανάγνωση του πληκτρολογίου.

10.6.1.2 Εμφάνιση χαρακτήρων στην οθόνη

10.6.1.3 Τερματισμός προγραμμάτων.

10.6.2.1 Επιλογή τρόπων εμφάνισης

11. Μνήμη δίσκου………………………………………………………………..

11.2 Πίνακας διανομής αρχείων

11.3 Λειτουργίες εισόδου/εξόδου δίσκου

11.3.1 Εγγραφή αρχείου σε δίσκο

11.3.1.1 Δεδομένα ASCIIZ

11.3.1.2 Αριθμός αρχείου

11.3.1.3 Δημιουργία αρχείου δίσκου

11.3.2 Ανάγνωση αρχείου δίσκου

Εισαγωγή

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

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

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

Το εγχειρίδιο περιγράφει τον προγραμματισμό σε γλώσσα assembly για υπολογιστές που βασίζονται σε μικροεπεξεργαστές Intel.

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

    Αρχιτεκτονική Η/Υ.

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

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

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

    μπλοκ διάγραμμα υπολογιστή?

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

    σύνολο και διαθεσιμότητα μητρώων·

    οργάνωση και μέθοδοι αντιμετώπισης·

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

    ένα σύνολο οδηγιών μηχανών υπολογιστή.

    Μορφές οδηγιών μηχανής.

    διακοπή χειρισμού.

Τα κύρια στοιχεία του υλικού του υπολογιστή: μονάδα συστήματος, πληκτρολόγιο, συσκευές οθόνης, μονάδες δίσκου, συσκευές εκτύπωσης (εκτυπωτής) και διάφορος εξοπλισμός επικοινωνίας. Μονάδα του συστήματοςαποτελείται από μητρική πλακέτα, τροφοδοτικό και κυψέλες επέκτασης για πρόσθετες κάρτες. Η πλακέτα συστήματος περιέχει έναν μικροεπεξεργαστή, μνήμη μόνο για ανάγνωση (ROM), ΕΜΒΟΛΟ(RAM) και συνεπεξεργαστής.

      Μητρώα.

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

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

    οκτώ καταχωρητές 32-bit (καταχωρητές γενικής χρήσης) EAX/AX/AH/AL, EBX/BX/BH/BL, ECX/CX/CH/CL, EDX/DX/DLH/DL, EBP/BP, ESI/SI, EDI/DI, ESP/SP;

    έξι καταχωρητές τμήματος 16-bit: CS, DS, SS, ES, FS, GS.

    καταχωρητές κατάστασης και ελέγχου: καταχωρητής σημαίας EFLAGS/FLAGS και καταχωρητής δείκτη εντολών EIP/IP.

Τα μέρη ενός καταχωρητή 32 bit υποδεικνύονται με κάθετο. Το πρόθεμα E (Extended) υποδηλώνει τη χρήση καταχωρητή 32 bit. Για την εργασία με byte, χρησιμοποιούνται καταχωρητές με προθέματα L (χαμηλό) και H(high), για παράδειγμα, AL, CH - που δηλώνουν τα χαμηλά και υψηλά byte των τμημάτων των 16-bit των καταχωρητών.

        Μητρώα γενικής χρήσης.

EAX/AX/AH/AL (Μητρώο συσσωρευτή) – μπαταρία. Χρησιμοποιείται στον πολλαπλασιασμό και τη διαίρεση, σε πράξεις εισόδου/εξόδου και σε ορισμένες πράξεις συμβολοσειρών.

EBX/BX/BH/BL – μητρώο βάσης(βασικός καταχωρητής), που χρησιμοποιείται συχνά κατά τη διευθυνσιοδότηση δεδομένων στη μνήμη.

ECX/CX/CH/CL – μετρητής(καταχωρητής καταμέτρησης), που χρησιμοποιείται ως μετρητής για τον αριθμό των επαναλήψεων του βρόχου.

EDX/DX/DH/DL – μητρώο δεδομένων(μητρώο δεδομένων), που χρησιμοποιείται για την αποθήκευση ενδιάμεσων δεδομένων. Σε ορισμένες ομάδες η χρήση του είναι υποχρεωτική.

Όλοι οι καταχωρητές αυτής της ομάδας επιτρέπουν την πρόσβαση στα «κατώτερα» μέρη τους. Μόνο τα κατώτερα τμήματα 16 και 8 bit αυτών των καταχωρητών μπορούν να χρησιμοποιηθούν για αυτοδιευθυνσιοδότηση. Τα ανώτερα 16 bit αυτών των καταχωρητών δεν είναι διαθέσιμα ως ανεξάρτητα αντικείμενα.

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

ESI/SI (καταχωρητής ευρετηρίου πηγής) – δείκτης πηγή. Περιέχει τη διεύθυνση του τρέχοντος στοιχείου πηγής.

EDI/DI (εγγραφή ευρετηρίου προορισμού) – δείκτης δέκτης(παραλήπτης). Περιέχει την τρέχουσα διεύθυνση στη γραμμή προορισμού.

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

ESP/SP (καταχωρητής στοίβας PoINTer) – κανω ΕΓΓΡΑΦΗ δείκτης σωρός. Περιέχει έναν δείκτη στην κορυφή της στοίβας στο τρέχον τμήμα στοίβας.

EBP/BP (base pointer register) – καταχωρητής δείκτη βάσης στοίβας. Σχεδιασμένο για να οργανώνει την τυχαία πρόσβαση σε δεδομένα μέσα στη στοίβα.

1.1.2. Μητρώα τμημάτων

Το μοντέλο λογισμικού μικροεπεξεργαστή έχει έξι καταχωρητές τμημάτων: CS, SS, DS, ES, GS, FS. Η ύπαρξή τους οφείλεται στη συγκεκριμένη οργάνωση και χρήση της μνήμης RAM από τους μικροεπεξεργαστές της Intel. Το υλικό του μικροεπεξεργαστή υποστηρίζει τη δομική οργάνωση του προγράμματος που αποτελείται από τμήματα.Για να υποδείξετε τα τμήματα που είναι διαθέσιμα σε αυτή τη στιγμήπροορίζονται καταχωρητές τμημάτων. Ο μικροεπεξεργαστής υποστηρίζει τους ακόλουθους τύπους τμημάτων:

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

    Τμήμα δεδομένων.Περιέχει δεδομένα που επεξεργάζεται το πρόγραμμα. Για πρόσβαση σε αυτό το τμήμα, χρησιμοποιήστε τον καταχωρητή DS (καταχωρητής τμήματος δεδομένων) - καταχωρητής δεδομένων τμήματος, το οποίο αποθηκεύει τη διεύθυνση του τμήματος δεδομένων του τρέχοντος προγράμματος.

    Τμήμα στοίβας.Αυτό το τμήμα είναι μια περιοχή μνήμης που ονομάζεται στοίβα. Ο μικροεπεξεργαστής οργανώνει τη στοίβα σύμφωνα με την αρχή - πρώτα "μέσα", πρώτα "έξω". Για πρόσβαση στη στοίβα, χρησιμοποιήστε τον καταχωρητή SS (καταχωρητής τμημάτων στοίβας) - καταχωρητής τμήματος στοίβας, που περιέχει τη διεύθυνση του τμήματος στοίβας.

    Πρόσθετο τμήμα δεδομένων.Τα επεξεργασμένα δεδομένα μπορούν να τοποθετηθούν σε τρία πρόσθετα τμήματα δεδομένων. Από προεπιλογή, τα δεδομένα θεωρείται ότι βρίσκονται στο τμήμα δεδομένων. Όταν χρησιμοποιείτε πρόσθετα τμήματα δεδομένων, οι διευθύνσεις τους πρέπει να προσδιορίζονται ρητά χρησιμοποιώντας ειδικά προθέματα παράκαμψης τμήματος στην εντολή. Οι διευθύνσεις πρόσθετων τμημάτων δεδομένων πρέπει να περιέχονται στους καταχωρητές ES, GS, FS (καταχωρητές τμημάτων δεδομένων επέκτασης).

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

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

Μητρώο δείκτη οδηγιών EIP/IP.

    μητρώο σημαίας EFLAGS/FLAGS.

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

EIP/IP (εγγραφή δείκτη οδηγιών) – δείκτης της ομάδας. Ο καταχωρητής EIP/IP έχει πλάτος 32 bit ή 16 bit και περιέχει τη μετατόπιση της επόμενης εντολής που θα εκτελεστεί σε σχέση με τα περιεχόμενα του καταχωρητή τμήματος CS στο τρέχον τμήμα εντολών. Αυτό το μητρώο δεν είναι άμεσα προσβάσιμο, αλλά μπορεί να αλλάξει χρησιμοποιώντας οδηγίες μετάβασης.

EFLAGS/FLAGS (Μητρώο σημαίας) – κανω ΕΓΓΡΑΦΗ σημαίες. Μέγεθος bit 32/16 bit. Τα μεμονωμένα bit αυτού του καταχωρητή έχουν συγκεκριμένο λειτουργικό σκοπό και ονομάζονται flags. Μια σημαία είναι ένα bit που παίρνει την τιμή 1 ("σύνολο σημαίας") εάν πληρούται κάποια συνθήκη, και την τιμή 0 ("διαγράφηκε η σημαία") διαφορετικά. Το χαμηλό μέρος αυτού του μητρώου είναι εντελώς παρόμοιο με τον καταχωρητή FLAGS για το i8086.

1.1.3 Μητρώο σημαίας

Ο καταχωρητής σημαιών είναι 32-bit και ονομάζεται EFLAGS (Εικ. 1). Τα μεμονωμένα bit του καταχωρητή έχουν συγκεκριμένο λειτουργικό σκοπό και ονομάζονται flags. Σε καθένα από αυτά αποδίδεται ένα συγκεκριμένο όνομα (ZF, CF, κ.λπ.). Τα κατώτερα 16 bit του EFLAGS αντιπροσωπεύουν τον καταχωρητή σημαίας FLAGS 16 bit που χρησιμοποιείται κατά την εκτέλεση προγραμμάτων γραμμένων για τους μικροεπεξεργαστές i086 και i286.

Εικ.1 Καταχωρητής σημαίας

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

Σημαίες κατάστασης:

CF (carry flag) - φέρουν σημαία. Λαμβάνει την τιμή 1 εάν, κατά την προσθήκη ακεραίων, εμφανίστηκε μια μονάδα μεταφοράς που δεν «ταιριάζει» στο πλέγμα bit ή εάν, κατά την αφαίρεση αριθμών χωρίς πρόσημο, ο πρώτος από αυτούς ήταν μικρότερος από τον δεύτερο. Στις εντολές shift, το bit που βρίσκεται εκτός του πλέγματος bit εισάγεται στο CF. Το CF καταγράφει επίσης τα χαρακτηριστικά της εντολής πολλαπλασιασμού.

OF (σημαία υπερχείλισης) - σημαία υπερχείλισης. Ορίστε σε 1 εάν, κατά την πρόσθεση ή την αφαίρεση ακεραίων με προσημασμένους αριθμούς, το αποτέλεσμα είναι ένα αποτέλεσμα που υπερβαίνει την επιτρεπόμενη τιμή σε απόλυτη τιμή (η μάντισσα ξεχείλισε και "σκαρφάλωσε" στο ψηφίο του πρόσημου).

ZF (σημαία μηδέν) - μηδενική σημαία. Ορίστε σε 1 εάν το αποτέλεσμα της εντολής είναι 0.

SF (σημαία Sign) - σημαία σημάδι. Ορίστε το σε 1 εάν μια πράξη σε αριθμούς με προσημείωση παράγει αρνητικό αποτέλεσμα.

PF (σημαία ισοτιμίας) - σημαία ισοτιμία. Ίσο με 1 αν το αποτέλεσμα της επόμενης εντολής περιέχει ζυγό αριθμό δυαδικών. Συνήθως λαμβάνεται υπόψη μόνο για λειτουργίες I/O.

AF (βοηθητική σημαία μεταφοράς) - επιπλέον σημαία μεταφοράς. Διορθώνει τις δυνατότητες εκτέλεσης πράξεων σε δυαδικούς δεκαδικούς αριθμούς.

Σημαίες του κράτους:

DF (σημαία κατεύθυνσης) - σημαία κατεύθυνσης. Ρυθμίζει την κατεύθυνση για την προβολή γραμμών σε εντολές γραμμής: όταν DF=0, οι γραμμές προβάλλονται «εμπρός» (από την αρχή μέχρι το τέλος), όταν DF=1 - προς την αντίθετη κατεύθυνση.

IOPL (επίπεδο προνομίου εισόδου/εξόδου) – Επίπεδο προνομίου I/O.Χρησιμοποιείται σε προστατευμένη λειτουργία λειτουργίας μικροεπεξεργαστή για τον έλεγχο της πρόσβασης σε εντολές I/O, ανάλογα με το προνόμιο της εργασίας.

NT (ένθετη εργασία) – σημαία ένθεσης εργασιών.Χρησιμοποιείται σε προστατευμένη λειτουργία λειτουργίας μικροεπεξεργαστή για την καταγραφή του γεγονότος ότι μια εργασία είναι ένθετη μέσα σε μια άλλη.

Σημαία συστήματος:

IF (σημαία INTerrupt) - σημαία διακοπής. Όταν IF=0, ο επεξεργαστής σταματά να ανταποκρίνεται στις εισερχόμενες διακοπές· όταν IF=1, ο αποκλεισμός διακοπής αφαιρείται.

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

RF (σημαία βιογραφικού) – σημαία βιογραφικού. Χρησιμοποιείται κατά την επεξεργασία διακοπών από καταχωρητές εντοπισμού σφαλμάτων.

VM (λειτουργία εικονικής 8086) – εικονική σημαία 8086.Ο 1-επεξεργαστής λειτουργεί σε εικονική λειτουργία 8086. Ο επεξεργαστής 0 λειτουργεί σε πραγματική ή προστατευμένη λειτουργία.

AC (έλεγχος ευθυγράμμισης) – σημαία ελέγχου ευθυγράμμισης.Σχεδιασμένο για να επιτρέπει τον έλεγχο της ευθυγράμμισης κατά την πρόσβαση στη μνήμη.

      Οργάνωση μνήμης.

Η φυσική μνήμη στην οποία έχει πρόσβαση ο μικροεπεξεργαστής ονομάζεται RAM (ή μνήμη τυχαίας πρόσβασης - ΕΜΒΟΛΟ).Η RAM είναι μια αλυσίδα από byte που έχουν τη δική τους μοναδική διεύθυνση (τον αριθμό της), που ονομάζεται φυσικός.Το εύρος των τιμών φυσικής διεύθυνσης είναι από 0 έως 4 GB. Ο μηχανισμός διαχείρισης μνήμης είναι εξ ολοκλήρου hardware.

Το υλικό του μικροεπεξεργαστή υποστηρίζει πολλά μοντέλα χρήσης RAM:

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

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

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

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

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

    Εικονική λειτουργία 8086.Σε αυτήν τη λειτουργία, καθίσταται δυνατή η εκτέλεση πολλών προγραμμάτων για το i8086. Σε αυτήν την περίπτωση, μπορούν να λειτουργήσουν προγράμματα σε πραγματική λειτουργία.

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

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

Σχηματισμός φυσικής διεύθυνσης σε πραγματικό τρόπο

Στην πραγματική λειτουργία, το εύρος των αλλαγών στη φυσική διεύθυνση είναι από 0 έως 1 MB. Το μέγιστο μέγεθος τμήματος είναι 64 KB. Όταν επικοινωνείτε με έναν συγκεκριμένο φυσική διεύθυνσηΗ μνήμη RAM καθορίζεται από τη διεύθυνση της αρχής του τμήματος και τη μετατόπιση εντός του τμήματος. Η διεύθυνση έναρξης τμήματος λαμβάνεται από τον αντίστοιχο καταχωρητή τμήματος. Σε αυτήν την περίπτωση, ο καταχωρητής τμήματος περιέχει μόνο τα πιο σημαντικά 16 bit της φυσικής διεύθυνσης της αρχής του τμήματος. Τα χαμηλά τέσσερα bit που λείπουν από τη διεύθυνση των 20 bit λαμβάνονται μετατοπίζοντας την τιμή του καταχωρητή τμήματος προς τα αριστερά κατά 4 bit. Η λειτουργία μετατόπισης εκτελείται σε υλικό. Η τιμή 20-bit που προκύπτει είναι η πραγματική φυσική διεύθυνση που αντιστοιχεί στην αρχή του τμήματος. Αυτό είναι φυσική διεύθυνσηκαθορίζεται ως ένα ζεύγος "τμήμα: μετατόπιση", όπου το "τμήμα" είναι τα πρώτα 16 bit της αρχικής διεύθυνσης του τμήματος μνήμης στο οποίο ανήκει το κελί και το "offset" είναι η διεύθυνση 16 bit αυτού του κελιού, μετρημένη από η αρχή αυτού του τμήματος μνήμης (η τιμή 16 * το τμήμα +offset δίνει την απόλυτη διεύθυνση του κελιού). Εάν, για παράδειγμα, ο καταχωρητής CS αποθηκεύει την τιμή 1234h, τότε το ζεύγος διευθύνσεων 1234h:507h ορίζει μια απόλυτη διεύθυνση ίση με 16*1234h+507h =12340h+507h = 12847h. Ένα τέτοιο ζεύγος γράφεται ως διπλή λέξη και (όπως για τους αριθμούς) σε μια "ανεστραμμένη" μορφή: η πρώτη λέξη περιέχει μια μετατόπιση και η δεύτερη - ένα τμήμα, και καθεμία από αυτές τις λέξεις, με τη σειρά της, παρουσιάζεται σε «ανεστραμμένη» μορφή. Για παράδειγμα, το ζεύγος 1234h:5678h θα γραφόταν ως εξής:| 78 | 56| 34 | 12|.

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

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

Κάθε εντολή μηχανής αποτελείται από δύο μέρη:

  • επιχειρησιακό - καθορισμός του "τι πρέπει να γίνει".
  • τελεστής - ορίζοντας αντικείμενα επεξεργασίας, «με τι να κάνουμε».

Η εντολή μηχανής μικροεπεξεργαστή, γραμμένη σε γλώσσα συναρμολόγησης, είναι μία γραμμή με την ακόλουθη συντακτική μορφή:

ετικέτα εντολής/οδηγίας τελεστές ;σχόλια

Σε αυτήν την περίπτωση, το απαιτούμενο πεδίο στη γραμμή είναι μια εντολή ή οδηγία.

Η ετικέτα, η εντολή/οδηγία και οι τελεστές (εάν υπάρχουν) διαχωρίζονται με τουλάχιστον έναν χαρακτήρα διαστήματος ή tab.

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

Από προεπιλογή, η γλώσσα assembly δεν κάνει διάκριση μεταξύ κεφαλαίων και πεζών γραμμάτων κατά τη σύνταξη εντολών ή οδηγιών.

Παραδείγματα γραμμών κώδικα:

Μετρήστε db 1 ;Όνομα, οδηγία, ένας τελεστής
mov eax,0 Εντολή, δύο τελεστές
cbw ; Ομάδα

Ετικέτες

Επιγραφή στη γλώσσα assembly μπορεί να περιέχει τα ακόλουθα σύμβολα:

  • όλα τα γράμματα του λατινικού αλφαβήτου·
  • αριθμοί από το 0 έως το 9.
  • ειδικοί χαρακτήρες: _, @, $, ?.

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

Ο πρώτος χαρακτήρας στην ετικέτα πρέπει να είναι γράμμα ή ειδικός χαρακτήρας (αλλά όχι αριθμός). Μέγιστο μήκοςετικέτες – 31 χαρακτήρες. Όλες οι ετικέτες που είναι γραμμένες σε μια γραμμή που δεν περιέχει οδηγία assembler πρέπει να τελειώνουν με άνω και κάτω τελεία: .

Της ομάδας

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

οδηγίες

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

τελεστές

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

  • Χωρίς επαναφορά τελεστών ;Επιστροφή
  • Ένας τελεστής inc ecx ;Αύξηση ecx
  • Δύο τελεστές προσθέτουν eax,12, Προσθέστε 12 στο eax

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

Οι τελεστές μπορούν να είναι

  • αναγνωριστικά·
  • συμβολοσειρές χαρακτήρων που περικλείονται σε μονά ή διπλά εισαγωγικά.
  • ακέραιοι σε δυαδικά, οκταδικά, δεκαδικά ή δεκαεξαδικά συστήματα αριθμών.
Αναγνωριστικά

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

Κανόνες καταγραφής αναγνωριστικών.

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

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

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

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

Ένα παράδειγμα προγράμματος "do τίποτα" στη γλώσσα assembly:

686P
.ΜΟΝΤΕΛΟ FLAT, STDCALL
.ΔΕΔΟΜΕΝΑ
.ΚΩΔΙΚΑΣ
ΑΡΧΗ:

ΜΟΥΣΚΕΥΩ
ΤΕΛΟΣ ΕΝΑΡΞΗ

Αυτό το πρόγραμμα περιέχει μόνο μία εντολή μικροεπεξεργαστή. Αυτή η εντολή είναι RET. Διασφαλίζει ότι το πρόγραμμα τερματίζεται σωστά. Γενικά, αυτή η εντολή χρησιμοποιείται για έξοδο από μια διαδικασία.
Το υπόλοιπο πρόγραμμα αφορά τη λειτουργία του μεταφραστή.
.686P - Επιτρέπονται εντολές προστατευμένης λειτουργίας Pentium 6 (Pentium II). Αυτή η οδηγία επιλέγει το υποστηριζόμενο σύνολο οδηγιών συναρμολόγησης, υποδεικνύοντας το μοντέλο του επεξεργαστή. Το γράμμα P που υποδεικνύεται στο τέλος της οδηγίας ενημερώνει τον μεταφραστή ότι ο επεξεργαστής λειτουργεί σε προστατευμένη λειτουργία.
.MODEL FLAT, stdcall - μοντέλο επίπεδης μνήμης. Αυτό το μοντέλο μνήμης χρησιμοποιείται στο χειρουργείο Σύστημα Windows. stdcall
Το .DATA είναι ένα τμήμα προγράμματος που περιέχει δεδομένα.
.CODE είναι ένα μπλοκ προγράμματος που περιέχει κώδικα.
ΕΝΑΡΞΗ - ετικέτα. Στο assembler, οι ετικέτες παίζουν μεγάλο ρόλο, κάτι που δεν μπορεί να ειπωθεί για τις σύγχρονες γλώσσες υψηλού επιπέδου.
END START - το τέλος του προγράμματος και ένα μήνυμα στον μεταφραστή ότι η εκτέλεση του προγράμματος πρέπει να ξεκινά με την ετικέτα START.
Κάθε ενότητα πρέπει να περιέχει μια οδηγία ΤΕΛΟΣ για να σηματοδοτήσει το τέλος πηγαίος κώδικαςπρογράμματα. Όλες οι γραμμές που ακολουθούν την οδηγία ΤΕΛΟΣ αγνοούνται. Εάν παραλείψετε την οδηγία ΤΕΛΟΣ, δημιουργείται ένα σφάλμα.
Η ετικέτα που καθορίζεται μετά την οδηγία ΤΕΛΟΣ λέει στον μεταφραστή το όνομα της κύριας μονάδας από την οποία ξεκινά η εκτέλεση του προγράμματος. Εάν το πρόγραμμα περιέχει μία ενότητα, η ετικέτα μετά την οδηγία ΤΕΛΟΣ μπορεί να παραλειφθεί.




Μπλουζα