Εντολές γλώσσας συναρμολόγησης. Βασικές εντολές γλώσσας assembly Σύντομη περιγραφή των γλωσσών assembly

Προκειμένου το μηχάνημα να εκτελεί ανθρώπινες εντολές σε επίπεδο υλικού, είναι απαραίτητο να ορίσετε μια συγκεκριμένη ακολουθία ενεργειών στη γλώσσα των "μηδενικών και μονάδων". Ο Assembler θα γίνει βοηθός σε αυτό το θέμα. Αυτό είναι ένα βοηθητικό πρόγραμμα που λειτουργεί με τη μετάφραση εντολών στη γλώσσα μηχανής. Ωστόσο, η σύνταξη ενός προγράμματος είναι μια πολύ χρονοβόρα και πολύπλοκη διαδικασία. Αυτή η γλώσσα δεν προορίζεται για τη δημιουργία εύκολων και απλών ενεργειών. Προς το παρόν, οποιαδήποτε γλώσσα προγραμματισμού χρησιμοποιείται (το Assembler λειτουργεί καλά) σας επιτρέπει να γράψετε ειδικές αποτελεσματικές εργασίες που επηρεάζουν σε μεγάλο βαθμό τη λειτουργία του υλικού. Ο κύριος σκοπός είναι η δημιουργία μικρο-εντολών και μικρών κωδικών. Αυτή η γλώσσα παρέχει περισσότερες δυνατότητες από, για παράδειγμα, Pascal ή C.

Σύντομη περιγραφή των γλωσσών assembly

Όλες οι γλώσσες προγραμματισμού χωρίζονται σε επίπεδα: χαμηλό και υψηλό. Οποιοδήποτε από τα συντακτικά συστήματα της «οικογένειας» του Assembler είναι διαφορετικό στο ότι συνδυάζει ταυτόχρονα μερικά από τα πλεονεκτήματα των πιο κοινών και σύγχρονων γλωσσών. Σχετίζονται επίσης με άλλους από το γεγονός ότι μπορείτε να χρησιμοποιήσετε πλήρως το σύστημα υπολογιστή.

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

Εν συντομία για τη δομή της γλώσσας

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

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

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

Η γλώσσα assembly έχει πολλές συντακτικές, οι οποίες θα συζητηθούν στο άρθρο.

Επαγγελματίες της γλώσσας

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

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

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

Μειονεκτήματα της γλώσσας

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

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

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

Γλωσσικές εντολές

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


Χρησιμοποιώντας οδηγίες

Ο προγραμματισμός μικροελεγκτών στη γλώσσα (το Assembler το επιτρέπει και κάνει εξαιρετική δουλειά) του χαμηλότερου επιπέδου στις περισσότερες περιπτώσεις τελειώνει με επιτυχία. Είναι καλύτερο να χρησιμοποιείτε επεξεργαστές με περιορισμένους πόρους. Για την τεχνολογία 32-bit, αυτή η γλώσσα ταιριάζει απόλυτα. Συχνά μπορείτε να δείτε οδηγίες σε κωδικούς. Τι είναι αυτό? Και σε τι χρησιμεύει;

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


προέλευση του ονόματος

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

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

εργαλεία μακροεντολών

Οι γλώσσες Assembler, οι οποίες είναι σχετικά πρόσφατες, διαθέτουν μακροεντολές. Διευκολύνουν τόσο τη σύνταξη όσο και την εκτέλεση ενός προγράμματος. Λόγω της παρουσίας τους, ο μεταφραστής εκτελεί τον γραπτό κώδικα πολλές φορές πιο γρήγορα. Όταν δημιουργείτε μια επιλογή υπό όρους, μπορείτε να γράψετε ένα τεράστιο μπλοκ εντολών, αλλά είναι πιο εύκολο να χρησιμοποιήσετε μακροεντολές. Θα σας επιτρέψουν να κάνετε γρήγορη εναλλαγή μεταξύ ενεργειών, σε περίπτωση που μια προϋπόθεση πληρούται ή δεν πληρούται.

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

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

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

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

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

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

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

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

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

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



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

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

Δυνατότητα προβολής και διόρθωσης εκτελέσιμων προγραμμάτων με την επέκταση .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). MP εσωτερική μνήμη. Σχεδιασμένο για αποθήκευση των επεξεργασμένων πληροφοριών, καθώς και των αποτελεσμάτων της λειτουργίας. Κατά την επεξεργασία λέξεων 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 AC είναι μια πρόσθετη μεταφορά, σχεδιασμένη να αποθηκεύει την τιμή μεταφοράς από το κατώτερο τετράδιο του αποτελέσματος.

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

Καθορίζει τη μορφή της εντολής και τις ενέργειες που πρέπει να εκτελεστούν από το 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 (σημαία διακοπής) - σημαία διακοπής. Με 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.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Μετάφραση του προγράμματος στο Microsoft Visual Studio 2005 5) Ορισμός επιλογών μεταγλωττιστή. Επιλέξτε στο δεξί κουμπί στο μενού αρχείου έργου Προσαρμοσμένοι κανόνες κατασκευής…

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

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

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

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

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

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

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

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

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

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

Συνεχίζοντας το θέμα:
Μόντεμ

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

Νέα άρθρα
/
Δημοφιλής