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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

λειτουργία - καθορισμός του "τι να κάνουμε"?

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Εισαγωγή.

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

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

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

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

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

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

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

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

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

Αφαιρέσεις (

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

Τμήματα (

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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



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

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

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

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

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

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

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

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

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

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

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

RAM, καταχωρητές, αναπαράσταση δεδομένων

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

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

    1.1. Μητρώα.

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

1.1.2. καταχωρητές τμημάτων

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

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

1.3. Αναπαράσταση δεδομένων.

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

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

2. Προγραμματικές δηλώσεις της Συνέλευσης …………………………………………

    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 σχετίζεται άμεσα με την εσωτερική οργάνωση του Η/Υ. Και δεν είναι τυχαίο ότι σχεδόν όλοι οι μεταγλωττιστές γλωσσών υψηλού επιπέδου υποστηρίζουν πρόσβαση στο επίπεδο προγραμματισμού assembler.

Στοιχείο της προετοιμασίας ενός επαγγελματία προγραμματιστή είναι απαραίτητα η μελέτη του 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 (υψηλό), για παράδειγμα, 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 (καταχωρητής δείκτη στοίβας) - κανω ΕΓΓΡΑΦΗ δείκτης σωρός. Περιέχει έναν δείκτη στην κορυφή της στοίβας στο τρέχον τμήμα στοίβας.

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

1.1.2. καταχωρητές τμημάτων

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

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

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

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

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

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

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

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

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

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

EIP/IP (εγγραφή δείκτη εντολών) - δείκτης εντολές. Ο καταχωρητής EIP/IP έχει πλάτος 32 ή 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 που είναι εκτός δικτύου εισάγεται στο CF. Το CF διορθώνει επίσης τα χαρακτηριστικά της εντολής πολλαπλασιασμού.

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

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 είναι μια αλυσίδα από byte που έχουν τη δική τους μοναδική διεύθυνση (τον αριθμό της), που ονομάζεται φυσικός.Το εύρος της φυσικής διεύθυνσης είναι από 0 έως 4 GB. Ο μηχανισμός διαχείρισης μνήμης βασίζεται εξ ολοκλήρου σε υλικό.

Ο μικροεπεξεργαστής υποστηρίζει πολλά μοντέλα χρήσης 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*segment +offset δίνει την απόλυτη διεύθυνση του κελιού). Εάν, για παράδειγμα, η τιμή 1234h είναι αποθηκευμένη στον καταχωρητή CS, τότε το ζεύγος διευθύνσεων 1234h:507h ορίζει μια απόλυτη διεύθυνση ίση με 16*1234h+507h =12340h+507h = 12847h. Ένα τέτοιο ζεύγος γράφεται ως διπλή λέξη και (όπως για τους αριθμούς) σε "ανεστραμμένη" μορφή: η πρώτη λέξη περιέχει τη μετατόπιση και η δεύτερη - το τμήμα, καθεμία από αυτές τις λέξεις με τη σειρά της αντιπροσωπεύεται στο "ανεστραμμένο" μορφή. Για παράδειγμα, το ζεύγος 1234h:5678h θα γραφόταν ως εξής:| 78 | 56| 34 | 12|.

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

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

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

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

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

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

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

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

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

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

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

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

Ετικέτες

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

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

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

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

Της ομάδας

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

οδηγίες

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

τελεστές

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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




Μπλουζα