Ο 8086 µπορεί να θεωρηθεί ότι αποτελείται από δύο τµήµατα επεξεργαστές, όπως φαίνεται και στο σχήµα 1, οι οποίοι είναι:



Σχετικά έγγραφα
Ο 8086 µπορεί να θεωρηθεί ότι αποτελείται από δύο τµήµατα επεξεργαστές, όπως φαίνεται και στο σχήµα 1, οι οποίοι είναι:

Καταχωρητές γενικής χρήσης και δεδοµένων (Data Registers)

Αρχιτεκτονική Υπολογιστών

Αρχιτεκτονική Υπολογιστών

Στοιχεία από Assembly Γιώργος Μανής

Σημειώσεις για τον 80x86

Αρχιτεκτονική Υπολογιστών

Υποπρογράμματα (Subroutines)

Αρχιτεκτονική Υπολογιστών

ΕΛΛΗΝΙΚΗ ΔΗΜΟΚΡΑΤΙΑ Ανώτατο Εκπαιδευτικό Ίδρυμα Πειραιά Τεχνολογικού Τομέα. Αρχιτεκτονική-Ι. Ενότητα 4: Το Προγραμματιστικό Μοντέλο του 8086

Αρχιτεκτονική Υπολογιστών

«ΜΙΚΡΟΫΠΟΛΟΓΙΣΤΕΣ» ΕΣΩΤΕΡΙΚΗ ΑΡΧΙΤΕΚΤΟΝΙΚΗ ΚΑΙ ΛΕΙΤΟΥΡΓΙΕΣ

Κεφάλαιο 3 Αρχιτεκτονική Ηλεκτρονικού Τμήματος (hardware) των Υπολογιστικών Συστημάτων ΕΡΩΤΗΣΕΙΣ ΑΣΚΗΣΕΙΣ

ΑΡΧΙΤΕΚΤΟΝΙΚΗ HARDWARE ΥΠΟΛΟΓΙΣΤΙΚΩΝ ΣΥΣΤΗΜΑΤΩΝ

Αρχιτεκτονική Υπολογιστών

Εργαστήριο 3 ΟΡΓΑΝΩΣΗ ΤΗΣ ΚΜΕ. Εισαγωγή

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

Ερωτήσεις θεωρίας MY. Μέρος Α. Υλικό.

ΕΡΓΑΣΤΗΡΙΟ ΑΡΧΙΤΕΚΤΟΝΙΚΗΣ ΙΙ Εργαστήριο 2 ο ΔΟΜΗ ΠΡΟΓΡΑΜΜΑΤΟΣ- ΨΕΥΔΟΕΝΤΟΛΕΣ ΜΑΚΡΟΕΝΤΟΛΕΣ- ΔΙΑΔΙΚΑΣΙΕΣ (ΕΙΣΑΓΩΓΗ)

Καταχωρητές & τμήματα μνήμης του Ματθές Δημήτριος Καθηγητής Πληροφορικής

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

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

Θ. Ζαχαριάδης Αν. Καθηγητής. Λ. Σαράκης Καθ. Εφαρμογών

Σελίδα 1 από 12. Απαντήσεις στο φυλλάδιο 55. Ερώτηση 1 η : Ένα υπολογιστικό σύστηµα αποτελείται από:

ΛΥΣΕΙΣ ΘΕΜΑΤΩΝ ΑΡΧΙΤΕΚΤΟΝΙΚΗΣ

ΘΕΜΑΤΑ ΑΡΧΙΤΕΚΤΟΝΙΚΗΣ-ΙΙ

Μικροεπεξεργαστές - Μικροελεγκτές Ψηφιακά Συστήματα

Αρχιτεκτονική Υπολογιστών Ασκήσεις Εργαστηρίου

Αρχιτεκτονική Υπολογιστών

Θ. Ζαχαριάδης Αν. Καθηγητής. Λ. Σαράκης Καθ. Εφαρμογών

Αριθμητικά Συστήματα

Αρχιτεκτονική Υπολογιστών Ασκήσεις Εργαστηρίου

Οδηγός Εκμάθησης στην Assembly

Μικροεπεξεργαστές. Σημειώσεις Μαθήματος Υπεύθυνος: Δρ Άρης Παπακώστας,

ΕΛΛΗΝΙΚΗ ΔΗΜΟΚΡΑΤΙΑ Ανώτατο Εκπαιδευτικό Ίδρυμα Πειραιά Τεχνολογικού Τομέα. Αρχιτεκτονική-Ι. Ενότητα 1: Εισαγωγή στην Αρχιτεκτονική -Ι

Γενική οργάνωση υπολογιστή «ΑΒΑΚΑ»

ΤΕΧΝΟΛΟΓΙΚΟ ΕΚΠΑΙΔΕΥΤΙΚΟ ΙΔΡΥΜΑ ΛΑΜΙΑΣ. A. Μετατροπή αριθμών 1. Μετατροπή αριθμών από δεκαδικό σε δυαδικό σύστημα αρίθμησης

Στοιχεία αρχιτεκτονικής μικροεπεξεργαστή

Επιμέλεια: ρ. Ν. Σγούρος ρ. Ι. Κονταξάκης

Συστήματα Μικροϋπολογιστών

Σελίδα 1 από 11. Απαντήσεις στο φυλλάδιο 57 Ερώτηση: 1 η : Οι ακροδέκτες αυτοί χρησιµοποιούνται για:

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

Ενότητα 4. Εισαγωγή στην Πληροφορική. Αναπαράσταση δεδοµένων. Αναπαράσταση πληροφορίας. υαδικοί αριθµοί. Χειµερινό Εξάµηνο

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

Οργάνωση επεξεργαστή (1 ο μέρος) ΜΥΥ-106 Εισαγωγή στους Η/Υ και στην Πληροφορική

Αρχιτεκτονική Υπολογιστών

Αρχιτεκτονική Υπολογιστών

ΕΙΔΙΚΟΤΗΤΑ: ΤΕΧΝΙΚΟΣ ΕΦΑΡΜΟΓΩΝ ΠΛΗΡΟΦΟΡΙΚΗΣ ΜΑΘΗΜΑ: ΕΙΣΑΓΩΓΗ ΣΤΗΝ ΠΛΗΡΟΦΟΡΙΚΗ

Οργάνωση Η/Υ. Ο Επεξεργαστής TRN. Τμήμα Εφαρμοσμένης Πληροφορικής Πανεπιστήμιο Μακεδονίας Α. Χατζηγεωργίου-Η. Σακελλαρίου

Κεφάλαιο 2. Συστήματα Αρίθμησης και Αναπαράσταση Πληροφορίας. Περιεχόμενα. 2.1 Αριθμητικά Συστήματα. Εισαγωγή

Οργάνωση Υπολογιστών (Ι)

ΕΛΛΗΝΙΚΟ ΑΝΟΙΚΤΟ ΠΑΝΕΠΙΣΤΗΜΙΟ ΣΧΟΛΗ ΘΕΤΙΚΩΝ ΕΠΙΣΤΗΜΩΝ ΚΑΙ ΤΕΧΝΟΛΟΓΙΑΣ ΠΡΟΓΡΑΜΜΑ ΣΠΟΥ ΩΝ ΠΛΗΡΟΦΟΡΙΚΗΣ ΑΠΑΝΤΗΣΕΙΣ ΘΕΜΑΤΩΝ ΕΞΕΤΑΣΕΩΝ

Αρχιτεκτονική Μηχανής. Αποθήκευση εδοµένων

Κεντρική Μονάδα Επεξεργασίας (ΚΜΕ) Τμήματα ΚΜΕ (CPU) Ένα τυπικό υπολογιστικό σύστημα σήμερα. Οργάνωση Υπολογιστών (Ι)

Πρόχειρες Σημειώσεις. Θ. Ζαχαριάδης Αν. Καθηγητής. Λ. Σαράκης Καθ. Εφαρμογών

C: Από τη Θεωρία στην Εφαρµογή 2 ο Κεφάλαιο

ΥΠΟΥΡΓΕΙΟ ΠΑΙΔΕΙΑΣ ΚΑΙ ΠΟΛΙΤΙΣΜΟΥ ΔΙΕΥΘΥΝΣΗ ΑΝΩΤΕΡΗΣ ΚΑΙ ΑΝΩΤΑΤΗΣ ΕΚΠΑΙΔΕΥΣΗΣ ΥΠΗΡΕΣΙΑ ΕΞΕΤΑΣΕΩΝ ΠΑΓΚΥΠΡΙΕΣ ΕΞΕΤΑΣΕΙΣ 2013

ΑΝΩΤΑΤΟ ΤΕΧΝΟΛΟΓΙΚΟ ΕΚΠΑΙ ΕΥΤΙΚΟ Ι ΡΥΜΑ ΣΕΡΡΩΝ ΣΧΟΛΗ ΤΕΧΝΟΛΟΓΙΚΩΝ ΕΦΑΡΜΟΓΩΝ ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ ΚΑΙ ΕΠΙΚΟΙΝΩΝΙΩΝ ΑΡΧΙΤΕΚΤΟΝΙΚΗ Η/Υ.

Αρχιτεκτονική Υπολογιστών Ασκήσεις Εργαστηρίου

Μάθημα 3.2: Κεντρική Μονάδα Επεξεργασίας

ΥΠΟΥΡΓΕΙΟ ΠΑΙΔΕΙΑΣ ΚΑΙ ΠΟΛΙΤΙΣΜΟΥ ΔΙΕΥΘΥΝΣΗ ΑΝΩΤΕΡΗΣ ΚΑΙ ΑΝΩΤΑΤΗΣ ΕΚΠΑΙΔΕΥΣΗΣ ΥΠΗΡΕΣΙΑ ΕΞΕΤΑΣΕΩΝ ΠΑΓΚΥΠΡΙΕΣ ΕΞΕΤΑΣΕΙΣ 2015

ΠΕΡΙΕΧΟΜΕΝΑ 1. Υπορουτίνες Μαθηµατικών Πράξεων 1.1. Προσηµασµένοι και απροσήµαστοι αριθµοί 1.2. Μετατροπές προσηµασµένων και απροσήµαστων αριθµών

ΥΠΟΥΡΓΕΙΟ ΠΑΙΔΕΙΑΣ ΚΑΙ ΠΟΛΙΤΙΣΜΟΥ ΔΙΕΥΘΥΝΣΗ ΑΝΩΤΕΡΗΣ ΚΑΙ ΑΝΩΤΑΤΗΣ ΕΚΠΑΙΔΕΥΣΗΣ ΥΠΗΡΕΣΙΑ ΕΞΕΤΑΣΕΩΝ ΠΑΓΚΥΠΡΙΕΣ ΕΞΕΤΑΣΕΙΣ 2014

Εργαστήριο Δομής και Λειτουργίας Μικροϋπολογιστών. Βοήθημα εκτέλεσης εργαστηριακής άσκησης 3: Εντολές λογικών πράξεων και εντολές κλήσης ρουτινών

Chapter 2. Εντολές : Η γλώσσα του υπολογιστή. (συνέχεια) Η διασύνδεση Υλικού και λογισμικού David A. Patterson και John L.

ΜΙΚΡΟΫΠΟΛΟΓΙΣΤΕΣ ΛΥΣΕΙΣ ΘΕΜΑΤΩΝ ΦΕΒ 2014 Καθηγητής: Νικολαΐδης Νικ. Ημ/νία εξέτασης:

Αναπαράσταση Δεδομένων. ΜΥΥ-106 Εισαγωγή στους Η/Υ και στην Πληροφορική

ΥΠΟΥΡΓΕΙΟ ΠΑΙΔΕΙΑΣ ΚΑΙ ΠΟΛΙΤΙΣΜΟΥ ΔΙΕΥΘΥΝΣΗ ΑΝΩΤΕΡΗΣ ΚΑΙ ΑΝΩΤΑΤΗΣ ΕΚΠΑΙΔΕΥΣΗΣ ΥΠΗΡΕΣΙΑ ΕΞΕΤΑΣΕΩΝ ΠΑΓΚΥΠΡΙΕΣ ΕΞΕΤΑΣΕΙΣ 2009 ΑΠΑΝΤΗΣΕΙΣ

Εργαστήριο ΙΑΧΕΙΡΙΣΗ ΜΝΗΜΗΣ

(Ιούνιος 2001 ΤΕΕ Ηµερήσιο) Σε κάθε µία από τις παρακάτω περιπτώσεις, να

a = 10; a = k; int a,b,c; a = b = c = 10;

ΚΕΦΑΛΑΙΟ 2: Χειρισµός εδοµένων

Τα µπιτ και η σηµασία τους. Σχήµα bit. ΚΕΦΑΛΑΙΟ 1: Αποθήκευση εδοµένων (1/2) 1.7 Αποθήκευση κλασµάτων 1.8 Συµπίεση δεδοµένων 1.9 Σφάλµατα επικοινωνίας

ΚΕΦΑΛΑΙΟ 8 Η ΓΛΩΣΣΑ PASCAL

Αρχιτεκτονική Επεξεργαστών Ψ.Ε.Σ

Συστήματα Μικροϋπολογιστών

0100: MAR ADR; wait;mdr DB; SCR L DH+MDR+CY

Κεφάλαιο 4 Σύνδεση Μικροεπεξεργαστών και Μικροελεγκτών ΕΡΩΤΗΣΕΙΣ ΑΣΚΗΣΕΙΣ

επιµέλεια Θοδωρής Πιερράτος

Ι ΑΣΚΩΝ ΚΑΘΗΓΗΤΗΣ: ΚΑΘΗΓΗΤΗΣ ΕΦΑΡΜΟΓΩΝ ΠΑΡΑΡΤΗΜΑ ΚΑΣΤΟΡΙΑΣ ΤΕΙ ΥΤΙΚΗΣ ΜΑΚΕ ΟΝΙΑΣ

Διαδικασιακός Προγραμματισμός

1 η Θεµατική Ενότητα : Δυαδικά Συστήµατα

5.1 Θεωρητική εισαγωγή

ΥΠΟΥΡΓΕΙΟ ΠΑΙΔΕΙΑΣ ΚΑΙ ΠΟΛΙΤΙΣΜΟΥ ΔΙΕΥΘΥΝΣΗ ΑΝΩΤΕΡΗΣ ΚΑΙ ΑΝΩΤΑΤΗΣ ΕΚΠΑΙΔΕΥΣΗΣ ΥΠΗΡΕΣΙΑ ΕΞΕΤΑΣΕΩΝ ΠΑΓΚΥΠΡΙΕΣ ΕΞΕΤΑΣΕΙΣ 2012

ΣΥΣΚΕΥΕΣ ΑΠΟΘΗΚΕΥΣΗΣ (ΜΝΗΜΗ)

Αρχιτεκτονικές Συνόλου Εντολών (ΙΙ)

Αρχιτεκτονική υπολογιστών

Οργάνωση Υπολογιστών

2.1. Εντολές Σχόλια Τύποι Δεδομένων

Εισαγωγή στην επιστήµη των υπολογιστών ΑΡΙΘΜΗΤΙΚΑ ΣΥΣΤΗΜΑΤΑ

; Γιατί είναι ταχύτερη η λήψη και αποκωδικοποίηση των εντολών σταθερού μήκους;

Εισαγωγή στην επιστήµη των υπολογιστών. Πράξεις µε µπιτ

ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Κεφάλαιο 8 : H γλώσσα προγραµµατισµού Pascal 1 ο Μέρος σηµειώσεων (Ενότητες 8.1 & 8.2 σχολικού βιβλίου)

Συμβολική Γλώσσα στον ΑΒΑΚΑ

Συστήματα Μικροϋπολογιστών

Αρχιτεκτονική-Ι Ενότητα 5:

Δυαδικό Σύστημα Αρίθμησης

Εισαγωγή στην επιστήμη των υπολογιστών

ΕΙΣΑΓΩΓΗ ΣΤΗΝ ΠΛΗΡΟΦΟΡΙΚΗ

Προηγμένοι Μικροεπεξεργαστές. Έλεγχος Ροής Προγράμματος

Transcript:

ΚΕΦΑΛΑΙΟ 1 Ο ΜΙΚΡΟΕΠΕΞΕΡΓΑΣΤΗΣ 8086 Με την ανάπτυξη του µικροεπεξεργαστή 8086 της Intel, έχουµε (από το 1978) την εµφάνιση της γενιάς των υπολογιστών των 16-bit. Στις επόµενες παραγράφους θα εξεταστεί η δοµή του, καθώς και µερικές από τις ιδιαιτερότητες του. 1.ΕΣΩΤΕΡΙΚΗ ΟΡΓΑΝΩΣΗ ΤΟΥ 8086 Ο 8086 µπορεί να θεωρηθεί ότι αποτελείται από δύο τµήµατα επεξεργαστές, όπως φαίνεται και στο σχήµα 1, οι οποίοι είναι: Σχήµα 1 - Η µονάδα εκτέλεσης (EU, Execution Unit), όπου γίνεται η επεξεργασία των στοιχείων. Η µονάδα αυτής περιέχει καταχωρητές δεδοµένων, καταχωρητές δείκτες, τον καταχωρητή κατάστασης, την αριθµητική λογική µονάδα και την µονάδα ελέγχου. - Η µονάδα διασύνδεσης (BIU, Bus Interface Unit) µέσω της οποίας επικοινωνεί ο µ/ε µε το περιβάλλον του (µνήµη και περιφερειακές συσκευές). Η µονάδα διασύνδεσης διαχειρίζεται όλες τις επικοινωνίες των διαύλων µε την µνήµη και Ι/Ο. Η µονάδα αυτή περιέχει τους καταχωρητές τµηµάτων, τον καταχωρητή δείκτη εντολής (Instruction Pointer, IP), ένα ειδικό αθροιστή για τον σχηµατισµό διευθύνσεων, µια ούρα αναµονής των επόµενων προς εκτέλεση εντολών µεγέθους έξη bytes και µια λογική µονάδα ελέγχου των αγωγών επικοινωνίας. Οι δύο αυτές µονάδες εργάζονται ασύγχρονα και παράλληλα σε "pipeline", όπως λέγεται, δηλαδή η EU όταν είναι ελεύθερη µεταφέρει µια εντολή από την κεφαλή της 1

ουράς αναµονής και ενώ την εκτελεί η BIU καλεί την επόµενη και την αποθηκεύει στο τέλος της ουράς αναµονής (queue) της BIU. Όταν η ουρά αδειάζει (π.χ. ύστερα από εντολές διακλάδωσης) η BIU εκτελεί ένα κύκλο µεταφοράς εντολής κατά τον οποίο ο µ/ε αναµένει την επόµενη προς εκτέλεση εντολή. Γενικά όµως η ουρά δεν είναι άδεια και εποµένως η EU δεν περιµένει κατά το κύκλο µεταφοράς. Οι αγωγοί επικοινωνίας (bus), για µεν το εσωτερικό του µ/ε έχουν εύρος 16 bits, ενώ για την επικοινωνία του µε τα υπόλοιπα κυκλώµατα του συστήµατος έχουν εύρος 20 bits. 2.ΚΑΤΑΧΩΡΗΤΕΣ 2.1 Καταχωρητές γενικής χρήσης και δεδοµένων (Data Registers). Οι καταχωρητές αυτοί είναι τέσσερις: AX (συσσωρευτής = accumulator), BX (βάσης = base), CX (µετρητής = counter), DX (δεδοµένων = data ). Καθένας από αυτούς µπορεί να χρησιµοποιηθεί σαν ένας 16-bit καταχωρητής ή σαν δύο ξεχωριστοί 8-bit καταχωρητές. Στην δεύτερη περίπτωση οι δύο οκτάδες δυαδικών ψηφίων που δηµιουργούνται ανά καταχωρητή συµβολίζονται µε τα γράµµατα H (High) και L (Low). Έτσι διακρίνουµε τους 8-bit καταχωρητές : AH, AL, BH, BL, CH, CL, DH, DL. Όλοι τους µπορούν να χρησιµοποιηθούν σε αριθµητικές πράξεις, περιστροφές µεταφορές από την µνήµη κ.α., αλλά και ο καθένας από αυτούς παρουσιάζει και ορισµένες ιδιαιτερότητες οι οποίες είναι: ΑΧ Εργασίες εισόδου / εξόδου, διορθώσεις δεκαδικών, πολλαπλασιασµοί, διαιρέσεις. BX είκτης για έµµεσο τρόπο προσδιορισµού διευθύνσεων µνήµης (indirect addressing). CX Μετρητής είτε εντολών επαναλήψεων είτε εντολών περιστροφών µεταφοράς. DX Επέκταση του AX από 16 bits σε 32 bits για πολλαπλασιασµούς και διαιρέσεις, έµµεσο τρόπο προσδιορισµού διεύθυνσης εισόδου εξόδου. 2.2 Καταχωρητές δείκτες. Πρόκειται για τέσσερις καταχωρητές των 16 bits, οι οποίοι χρησιµοποιούνται σαν δείκτες (pointer, index) για έµµεσο υπολογισµό διευθύνσεων µνήµης, αλλά και για αριθµητικές, λογικές πράξεις, περιστροφές. Αυτοί είναι οι: SP (δείκτης σωρού = Stack Pointer), BP (δείκτης βάσης = Base Pointer), SI (δείκτης προέλευσης = Source Index), DI (δείκτης προορισµού = Destination Index), Και έχουν τις εξής ιδιαιτερότητες : 2

SP είχνει την πρώτη ελεύθερη θέση στο σωρό. BP Χρησιµοποιείται για προσπέλαση δεδοµένων στο σωρό (τοπικές µεταβλητές, παράµετροι υποπρογραµµάτων). SI είκτης προέλευσης για µεταφορά χαρακτήρων από µια περιοχή µνήµης. DI είκτης προορισµού για µεταφορά χαρακτήρων σε µια περιοχή µνήµης. 2.3 είκτης εντολών Ο καταχωρητής IP (δείκτης εντολών = Instruction Pointer) δείχνει την απόκλιση (offset) της διευθύνσεως της επόµενης προς εκτέλεση εντολής µέσα στο τµήµα του κώδικα. Ενηµερώνεται από την BIU. Ο µετρητής προγράµµατος (Program Counter) της µηχανής von Neumann έχει αντικατασταθεί εδώ από το δίδυµο : CS : IP 2.4 Καταχωρητής κατάστασης ή σηµαιών. Σχήµα 2. Ο καταχωρητής σηµαιών ή κατάστασης SR είναι ένας καταχωρητής µεµονωµένων 16 bits, από τα οποία µόνο 9 χρησιµοποιούνται σαν σηµαίες κατάστασης ή ελέγχου. 2.4.1 είκτες κατάστασης.(6 bits) Τίθενται σε µια κατάσταση ( ON, OFF ) ανάλογα µε το αποτέλεσµα της προηγούµενης αριθµητικής, λογικής εντολής, εντολής σύγκρισης. Χρησιµοποιούνται (από άλλες εντολές) για την εκτέλεση διακλαδώσεων µέσα στο πρόγραµµα. Είναι : CF (Carry Flag) 3

Χρησιµοποιείται σαν ένα επιπλέον δυαδικό ψηφίο σε αριθµητικές εντολές (ADD, SUB, ADC, SBC). Εάν προκύψει ένα κρατούµενο (πρόσθεση) ή απαιτηθεί δανεισµός (αφαίρεση) έξω από το Msbit, παίρνει τιµή 1 αλλιώς 0. Επίσης επηρεάζεται από ορισµένες εντολές ολίσθησης και περιστροφής (RCR, RCL). Msbit είναι το πιο σηµαντικό bit δηλαδή το 7 ο όταν πρόκειται για πράξεις 1 ος byte ή 15 ο πρόκειται για πράξεις 1ας word = 2bytes. AF (Auxiliary Flag) Εάν µετά από αριθµητική πράξη προκύψει µεταφορά κρατούµενου από το 3 ο προς το 4 ο bit του byte, παίρνει την τιµή 1 αλλιώς 0. Χρησιµοποιείται σε πράξεις BCD (DAA, AAA). SF (Sign Flag) Χρησιµοποιείται από αριθµητικές ή λογικές πράξεις. Παίρνει την ίδια τιµή µε το Msbit (7 ή 15) του αποτελέσµατος. Εάν το αποτέλεσµα είναι θετικό γίνεται 0, εάν είναι αρνητικό γίνεται 1. ZF (Zero Flag) Γίνεται 1 αν το αποτέλεσµα µιας αριθµητικής ή λογικής πράξης είναι 0, αλλιώς µένει 0. OF (Overflow Flag) Γίνεται 1 όταν το προσηµασµένο αποτέλεσµα µιας πράξης (σε συµπλήρωµα του δύο) είναι πολύ µεγάλο ή πολύ µικρό για να χωρέσει στον τελεστή του αποδέκτη. Προκύπτει από µια αποκλειστική λογική πρόσθεση (exclusive-or) της µεταφοράς κρατούµενου από και προς το Msbit του αποτελέσµατος. PF (Parity Flag) Ψηφίο ισοτιµίας. Γίνεται 1 όταν το πλήθος των 1 του χαµηλού byte ενός αποτελέσµατος είναι περιττό. Να σηµειωθεί εδώ ότι τη κατάσταση αυτών των δεικτών εξαρτάται από το αποτέλεσµα µιας πράξεως και χρησιµεύουν για να γίνονται οι απαραίτητες διορθώσεις ή οι αλλαγές της ροής του προγράµµατος. 2.4.2 είκτες Ελέγχου.(3 bits) Χρησιµοποιούνται για τον έλεγχο του µικροεπεξεργαστή (διακοπές προγράµµατος, εκτέλεση βήµα προς βήµα, σειρές χαρακτήρων). IF (Interrupt Flag) 4

Τοποθετούµενος σε τιµή 1 ο δείκτης IF, ο µε αναγνωρίζει τις εξωτερικές διακοπές µε µάσκα, αλλιώς δεν λαµβάνονται υπόψη. Καµία επίδραση στις άλλες διακοπές (εσωτερικές και χωρίς µάσκα). DF (Direction Flag) Αναφέρεται µόνο στις εντολές σειράς χαρακτήρων. Εφόσον είναι 1 ο καταχωρητής δείκτης (SI ή DI) ελαττώνεται κατά ένα ή δύο και η επεξεργασία των σειρών χαρακτήρων γίνεται από την µεγαλύτερη προς την µικρότερη δ/νση, αλλιώς αυξάνεται κατά ένα η δύο. TF (Trap Flag) Σε κατάσταση 1 δηµιουργεί µια εσωτερική διακοπή µετά από την εκτέλεση κάθε εντολής και το πρόγραµµα εκτελείται βήµα βήµα. Προσφέρει πολύτιµη βοήθεια στην εκσφαλµάτωση του προγράµµατος. Στο σχήµα 2 φαίνονται οι θέσεις όλων των δεικτών µέσα στον καταχωρητή κατάστασης. Οι δείκτες εµφανίζονται µε τον αρχικό χαρακτήρα τους π.χ. T σηµαίνει Trap Flag. 2.5 Καταχωρητές τµηµάτων. Οι τέσσερις καταχωρητές τµηµάτων (segments) περιέχουν την διεύθυνση στην οποία βρίσκεται η αρχή του τµήµατος στο οποίο αναφέρονται µέσα στην µνήµη του υπολογιστή και είναι οι εξής: - Καταχωρητής CS (τµήµατος κώδικα = Code Segment). - Καταχωρητής DS (τµήµατος δεδοµένων = Data Segment). - Καταχωρητής SS (τµήµατος σωρού = Stack Segment). - Καταχωρητής ES (extra τµήµατος δεδοµένων = Extra Segment). 3. ΠΕΡΙΓΡΑΦΗ ΑΚΡΟ ΕΚΤΩΝ ΤΡΟΠΟΙ ΛΕΙΤΟΥΡΓΙΑΣ. Ο µ/ε 8086 παρουσιάζεται µε την µορφή ολοκληρωµένου κυκλώµατος DIL (Dual In Line) 40 ακροδεκτών (pins) και είναι σχεδιασµένος να λειτουργεί µε δύο τρόπους. Ελάχιστο (Minimum) και Μέγιστο (Maximum). Η επιλογή του τρόπου λειτουργίας γίνεται θέτοντας σε τάση 5V ή 0V τον ακροδέκτη ΜΝ/ΜΧ. Η διαφορά βρίσκεται στο ότι στην περίπτωση Minimum τα απαραίτητα σήµατα ελέγχου του διαύλου δίνονται απευθείας από τον µ/ε, ενώ στην περίπτωση Maximum δηµιουργούνται από το ολοκληρωµένο υποστήριξης 8288. Ακόµη στη Μέγιστη λειτουργία έχει την δυνατότητα παράλληλης επεξεργασίας µε την συνεργασία συνεπεξεργαστών 8087 και 8089. Ο 8086 πολυπλέκει (Multiplex) τα σήµατα διεύθυνσης και δεδοµένων. ιαθέτει 20 ακροδέκτες διευθύνσεων, µε τα σήµατα διευθύνσεων και δεδοµένων (Address 5

Data) να πολυπλέκονται στους δεκαέξι (από AD0 έως και AD15) και µε τα σήµατα ελέγχου και διευθύνσεων (System Address) να πολυπλέκονται στους υπόλοιπους τέσσερις (από A16 ή S3 έως και A19 ή S6). Επειδή τα δεδοµένα και οι διευθύνσεις υπάρχουν στους ίδιους ακροδέκτες, αλλά σε διαφορετικές χρονικές στιγµές, υπάρχει ένα σήµα ελέγχου ( Το ALE Address Latch Enable ) που ξεχωρίζει τι από τα δύο υπάρχει κάθε φορά στους ακροδέκτες. Η διαδικασία αυτή ελέγχεται από την BIU. Σχήµα 3 Άλλοι ακροδέκτες είναι: - GND ύο ακροδέκτες γείωσης. - NMI Αίτησης διακοπής χωρίς µάσκα. - INTR Αίτησης διακοπής µε µάσκα. - CLK Παρέχει τον παλµό του ρολογιού ο οποίος συγχρονίζει την δραστηριότητα µέσα στην CPU. - RESET Παρέχει σήµα διακοπής του προγράµµατος. Το σύστηµα περνάει σε κατάσταση επανέναρξης της λειτουργίας, και αρχίζει να εκτελείται το πρόγραµµα που βρίσκεται στην διεύθυνση 0FFFF0h (IP=0000,CS=0FFFFh). Κανονικά η δ/νση αυτή βρίσκεται στην ROM και περιέχει µια εντολή JMP 6

στην δ/νση του προγράµµατος εκκίνησης του συστήµατος. Το πρόγραµµα αυτό αναφέρεται σαν bootstrap loader. - READY έχεται σήµα αποδοχής από την µνήµη ή από µια διασύνδεση εισόδου/εξόδου, που σηµαίνει ότι δεδοµένα θα τοποθετηθούν στον δίαυλο δεδοµένων στον αµέσως επόµενο παλµό ρολογιού. - TEST Σε συνδυασµό µε την εντολή WAIT χρησιµοποιείται κυρίως σε περιπτώσεις πολυεπεξεργασίας. - RD Φανερώνει ότι λειτουργία εισόδου πρόκειται να εκτελεστεί λειτουργία εισόδου. - VCC Τροφοδοσία του συστήµατος +5V µε απόκλιση 10%. - S3, S4 είχνουν τον καταχωρητή τµήµατος που χρησιµοποιείται για τον σχηµατισµό δ/νσης. - S5 είχνει το περιεχόµενο του καταχωρητή σηµαιών (IF). - S6 Είναι πάντοτε µηδέν και δείχνει ότι ο µικροεπεξεργαστής ελέγχει τον δίαυλο του συστήµατος. - QS0 (ALE), QS1 (INTA) είχνει την κατάσταση της ουράς των εντολών. Η κατάσταση αυτή φανερώνει την κατάσταση της ουράς κατά την διάρκεια του προηγούµενου κύκλου ρολογιού. - S0, S1, S2 Φανερώνουν τον τύπο της µεταφοράς κατά την διάρκεια του τρέχοντα κύκλου µηχανής (Bus Cycle). - LOCK είχνει ότι ο έλεγχος διαχείρισης του διαύλου δεν είναι δυνατόν να αποκτηθεί από άλλο διαχειριστή διαύλου. - RQ/GT0 (HOLD) RQ/GT1 (HLDA) Χρησιµοποιούνται για είσοδο αιτήσεων αποδόσεως διαύλου σε άλλους διαχειριστές διαύλου και έξοδο αποδόσεων διαύλου. 4.ΟΡΓΑΝΩΣΗ ΜΝΗΜΗΣ Το εύρος του διαύλου δ/νσεων είναι 20 bit. Εποµένως ο 8086 έχει δυνατότητα προσπέλασης 1 Megabyte θέσεων µνήµης. Το σύνολο των δ/νσεων είναι από 00000h έως 0FFFFFh. Το περιεχόµενο κάθε θέσης µνήµης είναι 1 byte. Στην µνήµη του µπορούµε να θεωρήσουµε τµήµατα (segments) µνήµης καθένα από τα οποία είναι µεγέθους 64 kbytes. Η αρχή κάθε τµήµατος από το επόµενο απέχει 16 bytes, δηλαδή τα τµήµατα αρχίζουν από δ/νσεις µνήµης που διαιρούνται µε το 16 και ονοµάζονται παράγραφοι. Εποµένως έχουµε 64 kbytes παραγράφους µνήµης. Ο χωρισµός της µνήµης σε τµήµατα (segmentation) προήλθε κύρια από το γεγονός ότι είναι αδύνατη η διευθυνσιοποίηση της διαθέσιµης µνήµης εσωτερικά µε µόνον ένα από τους 7

διαθέσιµους καταχωρητές των 16 bits του 8086. Το πρόβληµα της διευθυνσιοποίησης εσωτερικά επιλύεται ως εξής: Για την προσπέλαση σε µια θέση µνήµης πρέπει να τεθεί η φυσική διεύθυνση (physical address) των 20 bits στο δίαυλο των διευθύνσεων. Με τον όρο φυσική δ/νση εννοούµε την πραγµατική δ/νση µνήµης που υπάρχει έξω από τον µ/ε και προκύπτει από αποκωδικοποίηση των σηµάτων στο δίαυλο δ/νσεων. Για τον σχηµατισµό της δ/νσης αυτής εσωτερικά στον 8086 χρησιµοποιούνται δύο καταχωρητές ως εξής: Σε έναν από τους καταχωρητές τµηµάτων τοποθετείται ο αύξων αριθµός της παραγράφου αρχής ενός τµήµατος µνήµης. Η φυσική δ/νση που ξεκινάει το αντίστοιχο τµήµα προκύπτει από πολλαπλασιασµό του περιεχοµένου του καταχωρητή τµήµατος επί 16. Ο δεύτερος καταχωρητής ο οποίος ονοµάζεται κατά περίπτωση pointer ή index (δείκτης) περιέχει την απόσταση από την αρχή του τµήµατος, η οποία ονοµάζεται λογική διεύθυνση ή µετατόπιση ή ενεργός διεύθυνση (logical address, offset, effective address). Ο τελικός προσδιορισµός της φυσικής διεύθυνσης προκύπτει από την πρόσθεση της λογικής δ/νσης στην δ/νση αρχής του τµήµατος σύµφωνα µε την απλή σχέση: < φυσική διεύθυνση > = < τµήµα > * 16 + < µετατόπιση > Μια πραγµατική δ/νση εσωτερικά στον µ/ε την αναπαριστούµε µε την σχέση: segment:offset όπου segment και offset δυο 4ψήφιοι δεκαεξαδικοί αριθµοί ή ένας καταχωρητής τµήµατος και ένας καταχωρητής δείκτης αντίστοιχα π.χ 987Ah:0100h, CS:IP, DS:9987H κ.α. Μέσω ενός καταχωρητή δείκτη υπάρχει η δυνατότητα προσπέλασης σε µια περιοχή µνήµης µήκους 64 kbytes από την αρχή του τµήµατος. εδοµένου ότι οι καταχωρητές τµηµάτων είναι τέσσερις έχουµε την δυνατότητα αρχικής επιλογής τεσσάρων βασικών τµηµάτων µε την ιδιαιτερότητα του το καθένα από αυτά, ανάλογα µε τον χρησιµοποιούµενο καταχωρητή τµήµατος: Ο καταχωρητής CS περιέχει την δ/νση αρχής του τµήµατος όπου έχουν αποθηκευτεί οι κωδικοί των εντολών του προγράµµατος (CODE). Η µετατόπιση στο τµήµα αυτό καθορίζεται αποκλειστικά και µόνο από τον καταχωρητή IP. Το δίδυµο δηλ. CS:IP αντικαθιστά τον µετρητή προγράµµατος (PC) των άλλων επεξεργαστών Π.χ αν CS = 345Ah και IP = 712Ch, τότε η φυσική δ/νση της επόµενης εντολής είναι: CS*10h + IP = 345Ah * 10h + 712Ch = 345A0h + 712Ch = 3B6CCh Ο καταχωρητής SS περιέχει την δ/νση από όπου αρχίζει το τµήµα µνήµης της σωρού (STACK). Στην περίπτωση αυτή η λογική δ/νση της κορυφής της σωρού δίνεται αποκλειστικά και µόνο από τον καταχωρητή BP. Π.χ. αν SS = 1ABCh και SP = 100h, τότε η φυσική δ/νση της κορυφής του σωρού είναι: SS * 10h + SP = 1ABCh * 10h + 100h = 1ABC0h + 100h = 1ACC0h Οι καταχωρητές DS και ES περιέχουν την δ/νση στην οποία αρχίζει κάποιο τµήµα δεδοµένων ( DATA ) απαραίτητων για την εκτέλεση του προγράµµατος, και παρέχουν ένα επιπλέον χώρο (EXTRA) που µπορεί να χρησιµοποιηθεί για αποθήκη δεδοµένων. 8

Σε κάθε ένα από τους 4 αυτούς καταχωρητές των 16 bits, αρκεί να προστεθούν από δεξιά (στα χαµηλά βάρη) 4 µηδενικά bits για σχηµατιστεί µια δ/νση 20 bits. Αυτή η δ/νση είναι η αρχή του αντίστοιχου τµήµατος (segment). Αλληλοεπικαλυπτόµενα τµήµατα Ανεξάρτητα τµήµατα Ταυτιζόµενα τµήµατα Σχήµα 4. Τα τέσσερα αυτά τµήµατα µπορεί να είναι τοποθετηµένα στην µνήµη κατά διαφόρους δυνατούς τρόπους δηλαδή είτε να ταυτίζονται είτε να αλληλοεπικαλύπτονται είτε να είναι συνεχόµενα στην µνήµη είτε τέλος και να καταλαµβάνουν ανεξάρτητες µη συνεχόµενες θέσεις στην µνήµη. Η πιο απλή και συµβατική προσέγγιση σε ένα πρόγραµµα είναι ο κώδικας και τα δεδοµένα να βρίσκονται σε γειτονικές περιοχές µνήµης, ενώ ο σωρός να τοποθετείται σε µια άλλη καθορισµένη περιοχή. 5.ΤΟΠΟΘΕΤΗΣΗ - ΠΡΟΣΠΕΛΑΣΗ ΤΩΝ ΛΕΞΕΩΝ ΣΤΗΝ ΜΝΗΜΗ Το περιεχόµενο κάθε θέσης µνήµης είναι 1 byte. Οι λέξεις ( word = 2 bytes ) δεδοµένα αποθηκεύονται µε το περισσότερο σηµαντικό byte στην χαµηλότερη δ/νση. Έτσι π.χ. ο αριθµός 3456h θα αποθηκευτεί, στις διαδοχικές δ/νσεις 678h και 679h σαν 5634h σύµφωνα µε το σχήµα: /νσεις 9

Οι διπλές λέξεις δεδοµένων όπως αυτές που αφορούν πραγµατικές δ/νσεις (segment:offset) αποθηκεύονται σε διαδοχικές θέσεις µνήµης αντίστροφα. Π.χ αν DS=1234h και SI=5678h η πραγµατική δ/νση (pointer) DS:SI αποθηκεύεται στις διαδοχικές θέσεις µνήµης 0300h έως και 0303h ως εξής: /νσεις Ο δίαυλος δεδοµένων του 8086 είναι 16 bits. Αν δούµε την µνήµη σε µορφή λέξεων, τότε καταλήγουµε σε ένα σύστηµα µνήµης 512 kbytes δ/νσεων των 16 bits η κάθε µια. Ο 8086 είναι σε θέση να προσπελάσει αυτά τα 16 bits δεδοµένων σε ένα κύκλο µηχανής ή και συγκεκριµένο byte από τα δύο από αυτά, ανάλογα µε τις τιµές των σηµάτων AD0 και BHE. ιακρίνονται οι εξής περιπτώσεις: Α. Προσπέλαση ενός byte σε άρτια δ/νση. AD0 = 0 και BHE = 1 (Ένας κύκλος µηχανής). Β. Προσπέλαση ενός byte σε περιττή δ/νση. AD0 = 1 και BHE = 0 (Ένας κύκλος µηχανής). Γ. Προσπέλαση δύο byte σε άρτια δ/νση. AD0 = 0 και BHE = 0 (Ένας κύκλος µηχανής).. Προσπέλαση δύο byte σε περιττή δ/νση. Χρειάζονται δύο κύκλοι µηχανής που αντιστοιχούν στις περιπτώσεις Β και Α. Στο πρόγραµµα που ακολουθεί, τοποθετούµε στο High τµήµα του καταχωρητή AX τον χαρακτήρα A και στο Low τµήµα του τον χαρακτήρα B. Ακολούθως µεταφέρουµε το περιεχόµενο στην µνήµη και τυπώνουµε το περιεχόµενο µνήµης byte byte. Όταν τρέξουµε το πρόγραµµα (αφού το µεταφράσουµε προηγουµένως) θα διαπιστώσουµε ότι οι χαρακτήρες τυπώνονται ανάστροφα δηλαδή BA Αυτό συµβαίνει βέβαια επειδή και τοποθετήθηκαν ανάστροφα στην µνήµη. ;Το πρόγραµµα αυτό δείχνει τον τρόπο αποθήκευσης των λέξεων στην µνήµη ;είναι γραµµένο µε απλοποιηµένες οδηγίες τµηµάτων Παράδειγµα προγράµµατος υπ αριθµόν 1 : TITLE word test; Οδηγία που ονοµάζει ένα πρόγραµµα DOSSEG.MODEL SMALL.CODE 10

MAIN proc far PUSH DS; προετοιµασία για έξοδο στο DOS, σώζουµε στο σωρό το XOR AX,AX; τµήµα (SEGMENT) του PSP PUSH AX; και την µηδενική µετατόπιση του PSP MOV AX,@DATA MOV DS, AX MOV Ah,'A' MOV AL,'B' MOV WORD LOW HI,AX; µεταφορά στην µνήµη MOV DL,CHAR low; εµφάνιση του πρώτου χαρακτήρα MOV AH,2 INT 21H MOV DL,CHAR hi; εµφάνιση του επόµενου χαρακτήρα MOV AH,2; 2η κλήση του DOS που εµφανίζει χαρακτήρα INT 21H; DOS RET; επιστροφή στο DOS µέσω INT 20h του PSP MAIN endp.data WORD LOW HI label word Char low db 0 Char hi db 0.STACK 100H END MAIN 6.ΕΙΣΟ ΟΙ ΕΞΟ ΟΙ Μια άλλη κατηγορία δ/νσεων τελείως ανεξάρτητη από τις δ/νσεις µνήµης αφορά τα περιφερειακά και είναι γνωστός σαν χώρος Ε/Ε µε µέγεθος 64 kbytes. Κάθε µια από τις δ/νσεις αυτές είναι γνωστή σαν θύρα (port) και η διευθυνσιοποίηση τους γίνεται µε την βοήθεια ενός µόνο καταχωρητή (DX) ή και ενός µόνο byte (σταθερά) για τις θύρες µε δ/νση µικρότερη του 256. Η επικοινωνία µε τις θύρες επιτυγχάνεται µε την χρήση ειδικών εντολών (IN και OUT). Οι καταχωρητές τµηµάτων δεν χρησιµοποιούνται στην διευθυνσιοποίηση των θυρών. 11

ΚΕΦΑΛΑΙΟ 2 ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΤΟΥ 8086 ΜΕ ΣΥΜΒΟΛΙΚΗ ΓΛΩΣΣΑ. 1.ΕΙΣΑΓΩΓΗ Η ASSEMBLY είναι συµβολική γλώσσα της γλώσσας µηχανής του µ/ε. Για την κατανόηση της λειτουργίας της γλώσσας µηχανής µπορούµε να θεωρήσουµε τον υπολογιστή σαν ένα σύστηµα που αποτελείται από πέντε υποσυστήµατα (είσοδος, έξοδος, αριθµητική λογική µονάδα, µνήµη) λειτουργικά συνδεµένα µεταξύ τους σύµφωνα µε το σχήµα παρακάτω: Αριθµητικό υποσύστηµα (πρόσθεση, αφαίρεση, πολλαπλασιασµός,διαίρεση, λογικές πράξεις ολίσθηση κ.α.) Είσοδοι πληκτρολόγιο, Ποντίκι δίσκος -Υποσύστηµα ελέγχου Έλεγχος διαύλων Έξοδοι Εκτυπωτής, δίσκος Οθόνη Υποσύστηµα µνήµης (Έως 1Mbyte RAM και ROM) Ο µ/ε διευθύνει τις δραστηριότητες του συστήµατος µε τον εξής απλό τρόπο: Μεταφέρει δεδοµένα από την µνήµη του τα οποία αποκωδικοποιούνται και εκτελούνται ακολούθως. Τα δεδοµένα που µπορούν να αποκωδικοποιηθούν και να εκτελεστούν λέγονται εντολές το δε σύνολο τους (instruction set) περιέχει όλες τις δυνατές ενέργειες που µπορεί το λογισµικό να απαιτήσει από τον επεξεργαστή. Ο µ/ε διαθέτει ένα σύνολο από εντολές σε δυαδική µορφή, γνωστό σαν γλώσσα µηχανής (machine language). Η συµβολική γλώσσα ASSEMBLY είναι µια προσανατολισµένη προς τον άνθρωπο µορφή της γλώσσας µηχανής και η χρήση της επιβλήθηκε γιατί είναι πιο εύκολος ο προγραµµατισµός σε συµβολική γλώσσα. Π.Χ είναι πιο ευκολοκατανόητη µια εντολή της µορφής : add a1,1 12

αντί της ισοδύναµης της σε γλώσσα µηχανής : 4 1 Τα πλεονεκτήµατα τους προγραµµατισµού σε συµβολική γλώσσα είναι: - Μπορείς και ελέγχεις όλες τις ενέργειες του επεξεργαστή µια προς µια. - Μπορείς και έχεις προσπέλαση απευθείας σε όλη την µνήµη και σε όλες τις συσκευές εισόδου εξόδου. - Ο κώδικας που παράγει είναι ο γρηγορότερος δυνατός γιατί οι εντολές µεταφράζονται µια προς µια στις αντίστοιχες της γλώσσας µηχανής. Ο συµβολοµεταφραστής (Assembler) είναι το πρόγραµµα που µεταφράζει προγράµµατα συµβολικής γλώσσας σε γλώσσα µηχανής. Αντικαθιστά τους τελεστές µε κωδικούς εντολών και τους τελεστέους µε διευθύνσεις µέσα σε λέξεις του υπολογιστή. Από τους συµβολοµεταφραστές (TASM.EXE ή MASM.EXE) παράγεται ένα ενδιάµεσο αρχείο µε κατάληξη.obj γνωστό σαν object module, το οποίο ακολούθως µε το πρόγραµµα συνδέτη (TLINK.EXE ή LINK.EXE) συνδέεται µε άλλα object modules και παράγεται το τελικό εκτελέσιµο πρόγραµµα σε γλώσσα µηχανής µε κατάληξη.exe ή.com. Παράδειγµα µε ένα κειµενογράφο γράφουµε το παρακάτω πρόγραµµα το οποίο τυπώνει ένα µήνυµα στην οθόνη: Παράδειγµα προγράµµατος υπ αριθµόν 2 : INTDOS EQU 21h TITLE MHNHMA KVDIKAS SEGMENT PUBLIC ASSUME CS:KVDIKAS,DS:DEDOMENA MAIN PROC NEAR mov ax,dedomena ; Ο ds πρέπει να περιέχει την δ/νση αρχής του mov ds,ax ; του τµήµατος των δεδοµένων lea dx,mhnhma ; Ενεργός δ/νση του αλφαριθµητικό στο dx mov ah,9 ; Αριθµός κλήσης του DOS για εµφάνιση string int INTDOS MAIN ENDP KVDIKAS ENDS DEDOMENA SEGMENT PUBLIC Mhnhma db WELLCOME TO ASSEMBLY,13,10, $ DEDOMENA ENDS SOROS SEGMENT PARA STACK SOROS Db 100h dup(0) ; Μέγεθος σωρού 256 bytes SOROS ENDS END MAIN 13

Αφού σώσουµε το πρόγραµµα στο δίσκο µε την ονοµασία MHNHMA.ASM, καλούµε τον συµβολοµεταφραστή µε την εντολή : TASM MHNHMA Εφόσον δεν προκύψουν λάθη, από την µετάφραση θα προκύψει αρχείο MHNHMA.OBJ. Τέλος για την παραγωγή του εκτελέσιµου αρχείου καλούµε το πρόγραµµα συνδέτη µε την εντολή : TLINK MHNHMA Από τον οποίο και προκύπτει το εκτελέσιµο αρχείο MHNHMA.EXE. Εφόσον όµως από τον κώδικα προβλέπεται να προκύψει εκτελέσιµο.com αρχείο, καλούµε τον συνδέτη µε την επιλογή /t (π.χ. TLINK /t ). Το πηγαίο πρόγραµµα ASSEMBLY αποτελείται από γραµµές οι οποίες µεταφράζονται η µια µετά την άλλη. Η σύνταξη κάθε γραµµής προγράµµατος έχει την µορφή: < Ετικέτα > < εντολή/οδηγία > < τελεστές > ; < σχόλια > Ετικέτες ( labels ) είναι ονοµασίες που αναφέρονται σε δ/νσεις µνήµης είτε στο τµήµα του κώδικα είτε µέσα στα δεδοµένα, όπου µπορούν να θεωρηθούν και σαν µεταβλητές ή ονοµασίες σταθερών τιµών. Στο προηγούµενο πρόγραµµα υπάρχουν οι ετικέτες : INDOS, KVDIKAS, MAIN, DEDOMENA, MHNHMA, SOROS. Εφόσον µετά την ετικέτα ακολουθεί εντολή και όχι οδηγία µπαίνει το σύµβολο : π.χ. στην ετικέτα again όπως φαίνεται στο παρακάτω παράδειγµα. again: add a1,5. jmp again Εντολές (instructions) προγράµµατος είναι οι συµβολικές λέξεις που µεταφράζονται σε γλώσσα µηχανής και παράγουν κώδικα, ενώ οι οδηγίες (directives) δεν παράγουν κώδικα µηχανής αλλά απλά καθοδηγούν τον µεταφραστή µε πιο τρόπο θα µεταφράσει τις επόµενες εντολές του προγράµµατος. Παραδείγµατα εντολών είναι mov, add, int, sub, mul, div κ.α. Το παράδειγµα παραπάνω χρησιµοποιεί τις οδηγίες EQU, SEGMENT, ENDS, PROC, ENDP, ASSUME, END. Τέλος κάθε οδηγία ή εντολή συντάσσεται µε κανένα, ένα, δύο και σπάνια µε τρεις τελεστές οι οποίοι γράφονται στην ίδια γραµµή µε την εντολή. Έχουµε τις εξής περιπτώσεις τελεστών: - Σταθερές αριθµητικές ( π.χ. 14, 35d, 21h, 10101000b, 0abcdh) ή αλφαριθµητικά και χαρακτήρες ( π.χ a ). Σηµειώνουµε ότι το σύµβολο d 14

µετά τον αριθµό σηµαίνει δεκαδικό σύστηµα, το h δεκαεξαδικό και το b δυαδικό. - Καταχωρητές (π.χ ax, bx). - Ετικέτες (π.χ jmp again). - Εκφράσεις όπως LENGTH, OFFSET,:,SEG κ.α. Ένα πρόγραµµα assembly (χωρίς να είναι υποχρεωτικό βέβαια) είναι χωρισµένο σε ανεξάρτητα τµήµατα (segments), άλλα από τα οποία χρησιµοποιούνται για κώδικα και άλλα για δεδοµένα. Σηµειώνουµε εδώ την υποχρεωτική δήλωση του τµήµατος σωρού µε την έκφραση STACK. Τα παραπάνω ισχύουν βέβαια για προγράµµατα.exe. Τα προγράµµατα.com παρουσιάζουν τις εξής διάφορες: - Είναι προγράµµατα ενός τµήµατος (κώδικας και δεδοµένα στο ίδιο τµήµα). Όλα τα τµήµατα που δηλώνονται πρέπει να θεωρούνται ότι ταυτίζονται. - Το πρόγραµµα αρχίζει 256 bytes µετά την αρχή του τµήµατος. Ο χώρος των 256 bytes χρησιµοποιείται σαν πρόθεµα του προγράµµατος (PSP Program Segment Prefix). - εν δηλώνεται σωρός. Σαν χώρος σωρού διατίθενται 256 τελευταία bytes του τµήµατος χωρίς αυτό να δηλώνεται µέσα στο πρόγραµµα. Παράδειγµα να γράφει πρόγραµµα ενός προγράµµατος.com που προσθέτει δυο µονοψήφιους αριθµούς και τυπώνει το αποτέλεσµα στην οθόνη: Παράδειγµα προγράµµατος υπ αριθµόν 3 : TITLE ΑΘΡΟΙΣΗ ; Τίτλος του προγράµµατος CGROUP GROUP KVDIKAS,DEDOMENA ; Ταύτιση των δύο τµηµάτων κώδικα ;και δεδοµένων KVDIKAS SEGMENT PUBLIC ASSUME CS:CGROUP,DS:CGROUP ORG 100h ; Το πρόγραµµα αρχίζει 256 µετά την αρχή του τµήµατος. MAIN PROC NEAR mov al,aritmos1 ;Ο πρώτος αριθµός στον καταχωρητή AL add al,aritmos2 ; Πρόσθεση και αποθήκευση του αποτελέσµατος στον AL mov dl,al ; Μεταφορά του αποτελέσµατος στον DL προκειµένου να εµφανιστεί add dl,30h ; Μετατροπή του αριθµού στην ASCII τιµή του χαρακτήρα mov ah,2 ; Αριθµός κλήσης του DOS για εµφάνιση χαρακτήρα στην οθόνη int 21h ; ιακοπή του DOS int 20h ; ιακοπή του DOS για έξοδο από το πρόγραµµα σε.com προγράµµατα 15

MAIN ENDP KVDIKAS ENDS DEDOMENA SEGMENT PUBLIC aritmos1 db 4 aritmos2 db 5 DEDOMENA ENDS END MAIN Υπεµθυµίζουµε ότι η κλήση του συνδέτη γίνεται µε την παράµετρο /t π.χ αν το πηγαίο ρχείο ονοµασθεί atroisi.asm, ο συνδέτης θα κληθεί ως εξής: Tlink /t atroisi.obj 2.ΒΑΣΙΚΕΣ Ο ΗΓΙΕΣ ΤΟΥ ΜΕΤΑΦΡΑΣΤΗ 2.1 Οδηγία END. Κάθε πρόγραµµα πρέπει να περιέχει την οδηγία END για να δηλώνει το τέλος του πηγαίου κώδικα. Στα.EXE προγράµµατα η ετικέτα µετά την END δηλώνει την δ/νση της πρώτης εντολής του προγράµµατος. Π.χ στο παρακάτω παράδειγµα αφαιρέσεις, εκτελείται πρώτα η παράγραφος ARXH η οποία καλεί την παράγραφο PRAXH : Παράδειγµα προγράµµατος υπ αριθµόν 4 : TITLE AFAIRESH; Τίτλος προγράµµατος KVDIKAS SEGMENT PUBLIC ASSUME CS:KVDIKAS,DS:DEDOMENA PRAXH PROC NEAR mov ax,dedomena mov ds,ax mov al,aritmos1; Ο αριθµός 1 στον καταχωρητή AL sub al,aritmos2; Πρόσθεση και αποθήκευση του αποτελέσµατος στον AL mov apotelesma,al; Αποθήκευση του αποτελέσµατος στην µνήµη mov dl,apotelesma; αποθήκευση του αποτελεσµατος στον DL σύµφωνα µε την 2η ;κλήση του DOS add dl,30h ; Μετατροπή του αριθµού στην ASCII τιµή του χαρακτήρα mov ah,2 ; Αριθµός κλήσης του DOS για εµφάνιση του χαρακτήρα στην οθόνη int 21h ret; Επιστροφή πίσω στο υποπρόγραµµα που κάλεσε παρούσα υπορουτίνα. PRAXH ENDP ARXH PROC NEAR call praxh ; Κλήση του υποπρογράµµατος praxh mov ah,4ch ; Κλήση του DOS για έξοδο από το πρόγραµµα int 21h ; ιακοπή του DOS ARXH ENDP KVDIKAS ENDS 16

DEDOMENA SEGMENT PUBLIC aritmos1 db 4 aritmos2 db 3 apotelesma db 0 DEDOMENA ENDS SOROS SEGMENT PARA STACK 'SOROS' db 256 dup (0) SOROS ENDS END ARXH 2.2 Οδηγίες τµηµάτων, διαδικασιών Οι οδηγίες SEGMENT και ENDS καθορίζουν µια οµάδα από δεδοµένα ή εντολές που θέλουµε να τοποθετηθούν µαζί σε ένα τµήµα. Το αναγνωριστικό που προηγείται δηλώνει το όνοµα του τµήµατος. Τα δεδοµένα ή οι εντολές που περιλαµβάνονται µεταξύ SEGMENT και ENDS καλούνται λογικό τµήµα (logical segment). Αντίστοιχα οι οδηγίες PROC και ENDP ορίζουν την αρχή και το πέρας ενός υποπρογράµµατος. Βέβαια οι οδηγίες των υποπρογραµµάτων δεν λύνουν από µόνες το πρόβληµα, αλλά απαιτείται και η χρήση των αντίστοιχων εντολών στον κώδικα (Calls, Ret) για την γραφή δοµηµένων προγραµµάτων. Η οδηγία ASSUME πληροφορεί τον µεταφραστή σε ποιο τµήµα αναφέρονται οι καταχωρητές που χρησιµοποιούµε. Η οδηγία ASSUME CS: είναι απαραίτητη σε κάθε πρόγραµµα.exe για να πληροφορεί τον µεταφραστή ποιο είναι το τµήµα του κώδικα. Οι ASSUME DS: και ASSUME ES είναι απαραίτητες πριν από την χρήση εντολών που έχουν σχέση µε µεταφορά δεδοµένων από και προς δ/νσεις µνήµης, για να πληροφορούν τον µεταφραστή σε πιο φυσικό τµήµα (DATA ή EXTRA) αναφέρεται κάθε λογικό τµήµα. Προσοχή η ASSUME πριν από εντολές που χρησιµοποιούν ετικέτες ( labels ) των τµηµάτων αυτών. Παράδειγµα προγράµµατος υπ αριθµόν 5 : TITLE POLLAPLASIAMOS; Τίτλος του προγράµµατος KVDIKAS SEGMENT PUBLIC ASSUME CS:KVDIKAS,DS:DEDOMENA1 PRAXH PROC NEAR ASSUME DS:DEDOMENA2 ;***** ΠΡΟΣΟΧΗ ΑΠΑΡΑΙΤΗΤΗ Ο ΗΓΙΑ ***** ;για την µετάφραση των δυο παρακάτω mov ax,dedomena2 mov ds,ax mov al,aritmos1; Ο αριθµός 1 στον καταχωρητή AL mov dl,aritmos2; Πρόσθεση και αποθήκευση του αποτελέσµατος στον AL mul dl; Πολλαπλασιασµός AL * DL, αποτέλεσµα στον AX mov apotelesma,al; Αποθήκευση του αποτελέσµατος στην µνήµη mov dl,apotelesma; Μεταφορά του αποτελέσµατος στον DL προκείµενου να εµφανιστεί add dl,30h ; Μετατροπή του αριθµού στην ASCII τιµή του χαρακτήρα mov ah,2 ; Αριθµός κλήσης του DOS για εµφάνιση χαρακτήρα στην οθόνη 17

int 21h ret PRAXH ENDP ARXH PROC NEAR ; Από εδώ αρχίζει η εκτέλεση του προγράµµατος call praxh ASSUME DS:DEDOMENA1 mov ax,dedomena1 mov ds,ax lea dx,mhnhma mov ah,09h int 21h mov ah,4ch ; Κλήση του DOS για έξοδο από το πρόγραµµα int 21h ; ιακοπή του DOS ARXH ENDP KVDIKAS ENDS DEDOMENA1 SEGMENT PUBLIC mhnhma db 10,13, "END of PROGRAM",10,13,"$" DEDOMENA1 ENDS DEDOMENA2 SEGMENT PUBLIC aritmos1 db 4 aritmos2 db 2 apotelesma db 0 DEDOMENA2 ENDS SOROS SEGMENT PARA STACK "SOROS" Db 256 dup (0) SOROS ENDS END ARXH ; Το πρόγραµµα αρχίζει να εκτελείται από την δ/νσh ARXH 2.3 Οδηγίες δεδοµένων Η DB ορίζει ότι κάθε ένα από τα δεδοµένα που ακολουθούν καταλαµβάνει χώρο ενός byte, η DW δύο, η DD τέσσερα, η DQ οκτώ και η DT δέκα bytes αντίστοιχα. Η εντολή DUP συνοδεύει µια από τις προηγούµενες και επαναλαµβάνει στην µνήµη το δεδοµένο που ακολουθεί σε παρένθεση τόσες φορές όσο και ο αριθµός που προηγείται. Σηµειώνεται ότι τα δεδοµένα µπορεί να είναι αριθµοί η χαρακτήρες. Η ετικέτα που προηγείται χρησιµεύει σαν µεταβλητή µνήµης. Παράδειγµα µε τις δηλώσεις : ARITMOI DW 10,13,29 MHNHMA DB HELLO PINAK DB 10 DUP (0) εσµεύουµε χώρο 21 bytes στην µνήµη σε τρεις δ/νσεις µνήµης µε συµβολικά ονόµατα : ARITMOI, MHNHMA, PINAK και δίνουµε αρχικές τιµές στις θέσεις µνήµης αυτές. Προφανώς µπορούµε να αλλάξουµε το περιεχόµενο των θέσεων αυτών µέσα στο πρόγραµµα. 18

Με την οδηγία LABEL όµως µπορούµε να ορίσουµε ένα σύµβολο (ετικέτα) µε το οποίο και έχουµε διαφορετική προσπέλαση στην ίδια περιοχή µνήµης, από την προκαθορισµένη. Μετά την οδηγία αυτή ακολουθεί ο τύπος του σύµβολου ο οποίος µπορεί να είναι BYTE, WORD, DWORD κ.λτ. Ο τύπος περιγράφει και το µέγεθος του. Παράδειγµα µε την δήλωση : NUM LABEL WORD CHARS DB 10,0 Ορίζουµε µια περιοχή στην µνήµη µεγέθους 2 χαρακτήρων και την ονοµάζουµε CHARS. Στην ίδια περιοχή όµως µπορούµε και έχουµε πρόσβαση µε την ετικέτα NUM σαν WORD όµως. Π.Χ µε την εντολή mov ax,num µεταφέρονται και οι δυο χαρακτήρες στον καταχωρητή AX. 2.4 Οδηγίες για σταθερές Με την οδηγία EQU ορίζουµε ένα σύµβολο µια σταθεράς, ενός αλφαριθµητικού ή ακόµη και εναλλακτικό όνοµα µιας δεσµευµένης λέξης π.χ µιας εντολής. Ο µεταφραστής όπου συναντήσει το σύµβολο πριν από την EQU το αντικαθιστά µε την σταθερά, αλφαριθµητικό ή την λέξη που ακολουθεί την EQU. Χρησιµοποιείται κυρίως για αριθµητικές σταθερές για να είναι το πρόγραµµα πιο ευανάγνωστο και τεκµηριωµένο. Παραδείγµατα: Blocksize EQU 512 BLOCKS EQU 4 Bufsize EQU Blocksize * BLOCKS Mhnhma EQU Τέλος προγράµµατος Τέλος αναφέρουµε το σύµβολο $ που δηλώνει την τρέχουσα θέση και είναι χρήσιµο για να υπολογίζει ο µεταφραστής το µήκος αλφαριθµητικών. Παράδειγµα: mhnhma DB Τέλος προγράµµατος mhkos mhnhma EQU (mhnhma - $) 2.5 Απλοποιηµένες οδηγίες τµηµάτων. 2.5.1 Εισαγωγή Αντί των κανονικών οδηγιών των τµηµάτων (SEGMENT, ENDS, ASSUME), οι εταιρείες Borland και Microsoft µας παρέχουν την ευχέρεια µε τους σύγχρονους συµβολοµεταφραστές, να χρησιµοποιούµε απλοποιηµένες οδηγίες τµηµάτων (Simplified Directives), µε τις οποίες δίνονται εξ ορισµού ονοµασίες σε τµήµατα, και είναι ευκολότερη η σύνδεση (linking) µε αντικείµενα αρχεία (object modulus) προγραµµάτων γραµµένα σε γλώσσες 3 ης γενιάς. 19

Γενικά η χρήση απλοποιηµένων οδηγιών είναι προτιµότερη όταν γράφουµε κώδικα ASSEMBLY, που θα συνδεθεί µε κώδικα γραµµένο σε C, PASCAL, PROLOC, BASIC και άλλη υψηλού επιπέδου γλώσσα, ή όταν γράφουµε προγράµµατα ASSEMBLY µικρού ή µεσαίου µεγέθους. Αντίθετα αν πρόκειται για πρόγραµµα µεγάλου µεγέθους, γραµµένα αποκλειστικά σε assembly, µε πολλά τµήµατα κώδικα και δεδοµένων, µε κλήσεις υποπρογραµµάτων και ενδοτµηµατικές και εξωτµηµατικές (δες τις εντολές CALL και RET), τότε επιβάλλεται η χρήση των κανονικών οδηγιών τµηµάτων. Οι απλοποιηµένες οδηγίες τµηµάτων είναι : DOSSEG,.MODEL,.STACK,.DATA,.CODE. 2.5.2 Οδηγίες.STACK,.DATA,.CODE. Οι παραπάνω οδηγίες ορίζουν τα τµήµατα σωρού, δεδοµένων και κώδικα αντίστοιχα. Η οδηγία.stack καθορίζει το µέγεθος του σωρού του προγράµµατος και είναι απαραίτητη σε ένα πρόγραµµα.exe. Π.χ µε την δήλωση.stack 200h Ορίζουµε τµήµα σωρού µεγέθους 512 bytes. Με την οδηγία.code ορίζουµε την αρχή του τµήµατος κώδικα. Μετά την οδηγία αυτή ακολουθούν οι εντολές του προγράµµατος ή οι διάφορες διαδικασίες. Με την οδηγία.data ορίζουµε την αρχή του τµήµατος των δεδοµένων. Μετά την οδηγία αυτή ακολουθούν οι δηλώσεις των µεταβλητών µνήµης του προγράµµατος. Βέβαια µε την οδηγία αυτή δεν έχουµε µέσα στο πρόγραµµα µας και αυτόµατη αποκατάσταση του καταχωρητή DS, ούτως ώστε ο DS να έχει την διεύθυνση του τµήµατος των δεδοµένων. Η αποκατάσταση αυτή πρέπει να γίνεται µέσα από το πρόγραµµα µε τις εντολές: mov ax,@data ; @DATA συµβολίζει την ονοµασία του τµήµατος των δεδοµένων, ;και @CODE του κώδικα mov ds,ax ; µε έµµεσο τρόπο ds <--- @data 2.5.3 Η οδηγία DOSSEG Η οδηγία αυτή συνήθως είναι και η πρώτη οδηγία του προγράµµατος. Η οδηγία αυτή οµαδοποιεί και τακτοποιεί τα τµήµατα του προγράµµατος assembly στο εκτελέσιµο αρχείο, σύµφωνα µε την σειρά που προβλέπεται από το MS-DOS λειτουργικό σύστηµα. Σύµφωνα µε την σειρά αυτή ο κώδικας προηγείται, ακολουθούν διάφορα αλλά τµήµατα εκτός του DGROUP και τέλος µπαίνει το DGROUP. Για περισσότερες λεπτοµέρειες να ανατρέξετε στο τεχνικό εγχειρίδιο του MS-DOS. 2.5.4 Η οδηγία.model 20

Με την οδηγία αυτή καθορίζουµε τον µοντέλο της µνήµης του προγράµµατος. Η έννοια µοντέλο σηµαίνει ο τρόπος µε τον οποίο χειρίζεται το πρόγραµµα τον κώδικα και τα δεδοµένα. Όταν λέµε κώδικα εννοούµε ένα σύνολο από υποπρογράµµατα τα οποία συνδέονται µεταξύ τους µε την εντολή κλήσης CALL και την εντολή επιστροφής RET. Τα υποπρογράµµατα αυτά µπορεί να είναι όλα στο ίδιο τµήµα όποτε η κλήσεις αυτές γίνονται µόνο µε την αλλαγή τιµής του καταχωρητή IP ( µόνο µε αλλαγή της µετατόπισης), ή σε άλλο τµήµα (εξωτµηµατικές) οπότε κλήσεις γίνονται µε αλλαγή των τιµών των καταχωρητών CS:IP (των δύο καταχωρητών που καθορίζουν την πλήρη δ/νση της επόµενης προς εκτέλεση εντολής ). Στις ενδοτµηµατικές κλήσεις οι εντολές call και ret είναι near, ένα στις εξωτµηµατικές είναι far. Με όµοιο τρόπο µπορούµε να ξεχωρίσουµε τα δεδοµένα σε ενδοτµηµατικά δεδοµένα και εξωτµηµατικά δεδοµένα. Τα ενδοτµηµατικά δεδοµένα βρίσκονται όλα στο ίδιο τµήµα και µπορούµε να τα προσπελάσουµε µόνο µε την µετατόπιση τους (offset). Τα εξωτµηµατικά δεδοµένα βρίσκονται σε διαφορετικά τµήµατα και για να τα προσπελάσουµε χρειάζεται η πλήρης δ/νσής τους segment:offset. Πρέπει να διευκρινίσουµε εδώ ότι σαν δεδοµένα στην παράγραφο αυτή, θεωρούµε τα δεδοµένα (κυρίως δυναµικής καταχώρησης µνήµης, αλλά και στατικά), τα οποία επεξεργαζόµαστε µε µεταβλητές δείκτες µνήµης (pointers). Στα ενδοτµηµατικά δεδοµένα οι δείκτες αυτοί είναι µεγέθους 2 byte (µόνο µετατόπιση), ενώ στα εξωτµηµατικά δεδοµένα είναι 4 bytes. Τα διαθέσιµα µοντέλα µνήµης είναι τα εξής έξη: Tiny. Πρόκειται για πρόγραµµα.com όλο ενός τµήµατος 65k. Small. Ο κώδικας του προγράµµατος είναι σε ένα τµήµα, και τα δεδοµένα σε ένα άλλο τµήµα. Κλήσεις υποπρογραµµάτων ενδοτµηµατικές και δείκτες µνήµης των 2 bytes. Compact. Ο κώδικας του προγράµµατος σε ένα τµήµα, ενώ τα δεδοµένα σε περισσότερα του ενός τµήµατα. Κλήσεις υποπρογραµµάτων ενδοτµηµατικές και δείκτες µνήµης των 4 bytes. Medium. Ο κώδικας σε περισσότερα του ενός τµήµατα ενώ τα δεδοµένα σε ένα τµήµα. Κλήσεις υποπρογραµµάτων εξωτµηµατικές και δείκτες µνήµης των 2 bytes. Large. Τόσο ο κώδικας όσο και τα δεδοµένα σε περισσότερα του ενός τµήµατα. Κλήσεις υποπρογραµµάτων εξωτµηµατικές και δείκτες µνήµης των 4 bytes. Huge. Το ίδιο µε το προηγούµενο, µε την διάφορα ότι επιτρέπει και την ανάπτυξη των πινάκων σε περισσότερα του ενός τµήµατα. Απαιτεί την χρήση ειδικής βιβλιοθήκης. Ακολουθεί παράδειγµα πρόγραµµα που ελέγχει αν µια µεταβλητή ( η num) µεγέθους µιας word (2 bytes) είναι µηδέν και τυπώνει το αντίστοιχο µήνυµα. Το πρόγραµµα είναι γραµµένο σε small µοντέλο. 21

Παράδειγµα προγράµµατος υπ αριθµόν 6 : ; αρχή τµήµατος κώδικα.model small.code mov ax,@data mov ds,ax mov ax,num or ax,ax ; έλεγχος µέσω της or αν είναι µηδέν jz einai_mhden mov dx, offset mhnhma_oxi mov ah,9; Κλήση του DOS που τυπώνει ένα µήνυµα int 21h ; DOS jmp telos einai_mhden: mov dx,offset mhnhma_nai mov ah,9; κλήση του DOS που τυπώνει ένα µήνυµα int 21h ; DOS telos: mov ah,4ch; κλήση του DOS για τέλος προγράµµατος int 21h ; DOS ; τµήµα δεδοµένων.data num dw 0 mhnhma_nai db 10,13, "It is zero",10,13,'$' mhnhma_oxi db 10,13, "It is not zero",10,13,'$' ;τµήµα σωρού.stack 256 end ΚΕΦΑΛΑΙΟ 3 ΒΑΣΙΚΕΣ ΕΝΤΟΛΕΣ 1.ΕΝΤΟΛΕΣ ΜΕΤΑΦΟΡΑΣ Ε ΟΜΕΝΩΝ 1.1 Εντολή MOV Σύνταξη MOV προορισµός, προέλευση Μεταφέρει δεδοµένα ενός η δύο byte από : καταχωρητή σε καταχωρητή (π.χ MOV AX,BX) καταχωρητή σε θέση µνηµης (π.χ MOV APOT,AL) θέση µνήµης σε καταχωρητή (π.χ MOV DL,APOT) σταθερά τιµή σε καταχωρητή (π.χ MOV AH,21h) σταθερά τιµή σε θέση µνήµης (π.χ MOV ARIT,5) 22

Η τελευταία περίπτωση δεν επιτρέπεται σε καταχωρητές τµηµάτων Π.χ MOV DS,DATASEG; δεν επιτρέπεται Και οι δυο τελεστές πρέπει να είναι ίσου µήκους δηλαδή ή και οι δύο είναι µεγέθους 1 byte ή και οι δύο είναι µεγέθους 1 word = 2 bytes. Π.Χ. οι εντολές: MOV ax,dl MOV bh,dx δεν επιτρέπονται. 1.2 Εντολή PUSH και POP Είναι εντολές µεταφοράς δεδοµένων από και προς το σωρό. Ο σωρός (stack) είναι µια περιοχή µνήµης στην οποία οι τιµές µπορούν να αποθηκεύονται και να ανακτούνται σύµφωνα µε την λογική LIFO (Last In First Out). Ο σωρός ενός προγράµµατος είναι ένα και µοναδικό τµήµα η βάση του οποίου έχει δ/νση SS:0000 η δε κορυφή του SS:SP. Η εντολή PUSH ελαττώνει τον SP κατά 2 και στην συνέχεια µεταφέρει µια λέξη (2 bytes) στην κορυφή του σωρού. Η εντολή POP µεταφέρει την λέξη που βρίσκεται στην κορυφή του σωρού στον τελεστή προορισµού και στην συνέχεια αυξάνει τον SP κατά 2. Τελεστής µπορεί να είναι ή καταχωρητής ή δ/νση µνήµης των 16 bit, όχι όµως σταθερά. Π.χ. Αν SP=100h, SS=1000h, Ax=12. Μετά από την εκτέλεση της εντολής : PUSH ax SP=0FEh και η δ/νση 1000:00FE περιέχει την τιµή 12. Η εντολή PUSH 10 δεν είναι επιτρεπτή. Αντίστοιχες προς τις παραπάνω εντολές είναι οι PUSHF, POPF οι οποίες συντάσσονται χωρίς τελεστή και µεταφέρουν από και προς το σωρό το περιεχόµενο του καταχωρητή κατάστασης. 1.3 Εντολή XCHG Ανταλλάσσει τα περιεχόµενα των δυο τελεστών (προέλευσης µε προορισµό) που ηµπορεί να είναι bytes ή words. Οι τελεστές µπορεί να είναι καταχωρητές ή θέσεις µνήµης. Απαγορεύεται να είναι όµως και οι δυο θέσεις µνήµης. Π.χ. Αν AX=14, BX=15, µετά την εντολή : 23

XCHG ax,bx Ο ax=15 και bx=14. 2.ΑΡΙΘΜΗΤΙΚΕΣ ΛΟΓΙΚΕΣ ΕΝΤΟΛΕΣ. 2.1 Αριθµητικές εντολές Ο 8086 από µόνος του διαθέτει περιορισµένες δυνατότητες αριθµητικών πράξεων. ιαθέτει εντολές µόνο πρόσθεσης, αφαιρέσεις, πολλαπλασιασµού και διαίρεσης σε προσηµασµένους και µη ακέραιους δυαδικούς αριθµούς των 8 ή των 16 bits. Οι αρνητικοί αριθµοί συµβολίζονται µε την λογική του συµπληρώµατος ως προς δύο (two s complement). Υποστηρίζει και πράξεις των 32 bits αλλά µε περισσότερες της µια εντολές. Πράξεις µε αριθµούς κινητής υποδιαστολής δεν υποστηρίζει. Οι πράξεις αυτές εκτελούνται ή από µαθηµατικό συνεπεξεργαστή εάν υπάρχει, ή από υποπρογράµµατα που περιέχουν πολυάριθµες εντολές ολισθήσεων, προσθέσεων και συγκρίσεων. 2.2 Πρόσθεση Αφαίρεση Οι εντολές είναι ADD και SUB και συντάσσονται όπως ακριβώς ή MOV δηλαδή : ADD προορισµός, προέλευση SUB προορισµός, προέλευση Ως προς τους τελεστές ισχύουν οι περιορισµοί της εντολείς MOV και επιπλέον ότι απαγορεύεται η χρήση καταχωρητών τµηµάτων. Οι εντολές ADC και SBB είναι παρόµοιες µε τις προηγούµενες µε επιπλέον στοιχείο ότι λαµβάνουν υπόψη την τιµή της Carry Flag, δηλαδή προσθέτουν ή αφαιρούν αντίστοιχα και το περιεχόµενο της CF. Είναι χρήσιµες για πράξεις των 32 bits. Παράδειγµα µε τον κώδικα που ακολουθεί προστίθεται ο 32 bit αριθµός που το περιεχόµενο του είναι αποθηκευµένο στους καταχωρητές CX:BX στον 32 bit αριθµό DX:AX. add ax,bx adc dx,cx ; αν υπάρχει κρατούµενο από τα χαµηλά 16 bit προστίθεται Ο 8086 διαθέτει εντολές αύξησης και µειώσεις κατά 1 INC και DEC. Οι εντολές αυτές είναι ιδιαίτερα χρήσιµες σε µετρητές και επεξεργασία πινάκων, συντάσσονται µε ένα τελεστή καταχωρητή ή µεταβλητή µνήµης. Οι εντολές : INC <τελεστής> DEC <τελεστής> είναι µικρότερες και ταχύτερες από τις αντίστοιχες : ADD <τελεστής>, 1 SUB <τελεστής>, 1 24

2.2 Πολλαπλασιασµός ιαίρεση Η εντολή MUL συντάσσεται: MUL <προέλευση> Όπου προέλευση ένας τελεστής γενικής χρήσης καταχωρητή ή µεταβλητή µνήµης. Αν ο τελεστής είναι ενός byte τότε η προέλευση πολλαπλασιάζει το περιεχόµενο του AL και το αποτέλεσµα αποθηκεύεται στον AX. Αν ο τελεστής είναι δυο byte τότε η προέλευση πολλαπλασιάζει το περιεχόµενο του AX και το αποτέλεσµα αποθηκεύεται σαν διπλή λέξη στους καταχωρητές DX:AX. Ο πολλαπλασιασµός θεωρείται µη προσηµασµένος. Η εντολή IMUL είναι παρόµοια αλλά για προσηµασµένο πολλαπλασιασµό Π.χ. αν AL=10 και DL=15 µετά την εντολή : MUL DL Ο AX = 150. Η εντολή DIV συντάσσεται DIV <προέλευση> Όπου προέλευση ένας τελεστής γενικής χρήσης καταχωρητής ή µεταβλητή µνήµης. Αν ο τελεστής είναι ενός byte τότε η προέλευση διαιρεί το περιεχόµενο του AX και το µεν πηλίκο της διαιρέσεις αποθηκεύεται στον AL το δε υπόλοιπο στον AH. Αν ο τελεστής είναι δύο byte τότε η προέλευση διαιρεί το περιεχόµενο της διπλής λέξης που είναι αποθηκευµένο στους DX:AX και το µεν πηλίκο της διαίρεσης αποθηκεύεται στον AX το δε υπόλοιπο στον DX. Η διαίρεση θεωρείται µη προσηµασµένη. Η εντολή IDIV είναι παρόµοια αλλά για προσηµασµένη διαίρεση. Π.χ. αν AX=115 και DL=10 µετά την εντολή : DIV DL Ο AH =5 και AL = 11. Τέλος αναφέρουµε την εντολή NEG <προορισµός> η οποία αλλάζει το πρόσηµο του τελεστή σε συµπλήρωµα ως προς δύο. 2.3 Λογικές πράξεις Ο 8086 διαθέτει πλήρες σύνολο λογικών εντολών AND, OR, XOR και NOT. Οι εντολές αυτές είναι πολύ χρήσιµες για την επεξεργασία µεµονωµένων bit ενός byte ή µιας λέξης. Οι πράξεις σε δεδοµένα bit γίνονται συµφωνά µε τους γνωστούς πίνακες αλήθειας. Οι δε λογικές πράξεις εκτελούν τις πράξεις µε προσανατολισµό σε bit ενεργώντας στα αντίστοιχα bits των τελεστών Π.Χ αν AL=10110110b, AH=11110000b µετά την εκτέλεση της εντολής : AND al,ah ο al = 10110000b 25

ηλαδή η παραπάνω εντολή εκτελεί ένα λογικό ΚΑΙ του 0 bit του al µε το 0 bit του ah, του 1 bit του al µε το 1 bit του ah και ούτω καθεξής. Οι AND, OR, XOR συντάσσονται µε δύο τελεστές, η NOT µε έναν. Προορισµός είναι ο πρώτος τελεστής όπως στις αριθµητικές πράξεις, και ως προς το είδος των τελεστών ισχύουν τα ίδια µε τις αριθµητικές πράξεις. 3.ΟΛΙΣΘΗΣΕΙΣ ΠΕΡΙΣΤΡΟΦΕΣ Ο 8086 διαθέτει µια ποικιλία εντολών µε τις οποίες µπορεί να µετακινεί bits αριστερά και δεξιά σε έναν καταχωρητή ή στην µνήµη. Οι σηµαντικότερες από αυτές είναι : CF SHL ή SAL 0 Η SHL ή SAL µετακινεί κάθε bit του τελεστή µια θέση προς τα αριστερά προς την κατεύθυνση του σηµαντικότερου bit. Το σηµαντικότερα bit µετακινείται στην CF και στο χαµηλότερο bit εισέρχεται ένα 0. Ισοδυναµεί µε ταχύτατο πολλαπλασιασµό του τελεστή επί 2. 0 SHR CF Η SHR µετακινεί κάθε bit του τελεστή µια θέση προς τα δεξιά. Το µη σηµαντικότερο bit (υπ αριθµ. 0) µετακινείται στην CF και στο υψηλότερο bit εισέρχεται ένα 0. Ισοδυναµεί µε ταχύτατη µη προσηµασµένη διαίρεση του τελεστή δια 2. 26

SAR CF Η SAR είναι παρόµοια προς την προηγούµενη εντολή δηλαδή µετακινεί κάθε bit του τελεστή µια θέση προς τα δεξιά αλλά το σηµαντικότερο bit αφού µετακινηθεί προς τα δεξιά επιστρέφει στην θέση του. Ισοδυναµεί µε ταχύτατη προσηµασµένη διαίρεση του τελεστή δια 2. Υπάρχουν οι εξής 4 εντολές περιστροφής: ROR CF H ROR είναι παρόµοια µε την SHR µε την διαφορά ότι το ολιγότερο σηµαντικό bit µεταφέρεται στο σηµαντικότερο bit καθώς και στην CF. 27

ROL CF Η ROL είναι αντίστροφος της προηγούµενης εντολής. Περιστρέφει τα bits κατά αριστερή φορά. RCR CF CF RCL 28

Η RCL και RCR είναι λίγο διαφορετικές από τις προηγούµενες. Στις εντολές αυτές κατά την περιστροφή συµµετέχει και η CF. ηλαδή κατά την RCL τα bits ολισθαίνουν προς τα αριστερά, το σηµαντικότερο bit µεταφέρεται στην CF και το περιεχόµενο της CF µεταφέρεται στο υπ αριθµ. 0 bit. Η RCR λειτουργεί αντίστροφα. Όλες οι παραπάνω εντολές συντάσσονται µε δυο τρόπους. Εφόσον οι ολισθήσεις ή περιστροφές είναι µια ο δεύτερος τελεστής είναι 1, αλλιώς δεύτερος τελεστής είναι ο καταχωρητής CL ο οποίος και καθορίζει το αριθµό των περιστροφών ή ολισθήσεων. Π.χ µε την εντολή: SHL AX,1 Πολλαπλασιάζεται το περιεχόµενο του AX επί 2. Ενώ µε τις εντολές : MOV CL,4 SHL AX,CL Πολλαπλασιάζεται το περιεχόµενο του AX επί 16. 4.ΑΛΛΑΓΗ ΡΟΗΣ ΠΡΟΓΡΑΜΜΑΤΟΣ ΣΥΓΚΡΙΣΕΙΣ ΕΝΤΟΛΕΣ ΕΙΚΤΩΝ 4.1 Εισαγωγή Κατά την εκτέλεση ενός προγράµµατος κανονικά οι εντολές του αναλύονται και εκτελούνται ακολουθησιακά, γραµµικά. Αλλά ένα θεµελιώδες χαρακτηριστικό κάθε χρήσιµου υπολογιστή είναι η παρουσία εντολών µε τις οποίες διακλαδώνεται το πρόγραµµα σε εντολή άλλη από την επόµενη που ακολουθεί στην µνήµη. Περιλαµβάνονται εντολές διακλαδώσεων χωρίς συνθήκη, αλλά και είτε πολύ χρήσιµες εντολές µε της οποίες η διακλάδωση εξαρτάται από την κατάσταση των σηµαιών ή από το αποτέλεσµα της πράξης. Υπενθυµίζεται ότι οι αριθµητικές, λογικές πράξεις και οι περιστροφές είναι γνωστό βέβαια επηρεάζουν την κατάσταση των δεικτών κατάστασης. Οι σηµαντικότεροι δείκτες κατάστασης είναι οι CF, OF, ZF. 4.2 ιακλαδώσεις χωρίς συνθήκη Η εντολή είναι η JMP <ετικέτα> Η διακλαδώσει µπορεί να είναι : - Σε σχετική διεύθυνση ενός byte ( -128 έως +127 ) θέσεων από την διεύθυνση της επόµενης εντολής κλήσεως. Στην περίπτωση αυτή είναι υποχρεωτική η χρήση της οδηγίας SHORT. - Σε σχετική διεύθυνση µιας λέξης ( -32768 έως +32767 ) θέσεων από την διεύθυνσης της επόµενης εντολής κλήσεως. Η διακλάδωση αυτή είναι στο ίδιο τµήµα κώδικα (ενδοτµηµατική). 29

- Σε σχετική διεύθυνση δύο λέξεων θέσεων. Στην περίπτωση αυτή είναι υποχρεωτική η χρήση της οδηγίας FAR PTR. Η διακλάδωση αυτή καλύπτει όλο το χώρο της µνήµης του 8086. Η δ/νση µπορεί να είναι σταθερή (άµεση) ή µεταβλητή (έµµεση). Παραδείγµατα : a:.. jmp SHORT a; άµεση ενός byte διακλάδωση στο label a a:.. jmp FAR PTR a; άµεση εξωτµηµατική διακλάδωση στο label a a:.. mov ax, OFFSET a jmp ax ; έµµεση ενδοτµηµατική διακλάδωση στο label a a:.. jmp word ptr [b] ; έµµεση ενδοτµηµατική διακλάδωση στο label a.. b dw offset a 4.3 ιακλαδώσεις µε συνθήκη Συγκρίσεις Ο 8086 διαθέτη 18 εντολές διακλαδώσεων µε τις οποίες υπάρχει η δυνατότητα διακλάδωσης ανάλογα µε την τιµή µιας σηµαίας ή συνδυασµού σηµαιών. Ειδικά αναφέρουνε ότι αν ελέγχουµε το αποτέλεσµα πράξεων µε µη προσηµασµένους αριθµούς τότε λαµβάνεται υπόψη µεταξύ των άλλων η CF ( Carry Flag), ενώ σε προσηµασµένους αριθµούς ελέγχεται η OF (Overflow Flag) και η SF (Sign Flag). Πολύ συχνά µιας εντολής διακλάδωσης µε συνθήκη προηγείται µια εντολή σύγκρισης CMP όποτε και η διακλάδωση πραγµατοποιείται ή όχι, ανάλογα µε το αποτέλεσµα της σύγκρισης. Η εντολή σύγκρισης συντάσσεται όπως η εντολή αφαίρεσης SUB: CMP <προορισµός>, <προέλευση> Η CMP συγκρίνει τον προορισµό µε την προέλευση, δηλαδή όπως και η SUB αφαιρεί από τον προορισµό την προέλευση, ενηµερώνει τους δείκτες κατάστασης (Flags) ανάλογα µε το αποτέλεσµα της πράξης αλλά το αποτέλεσµα της πράξης δεν το αποθηκεύει πουθενά, δηλαδή οι τελεστές της σύγκρισης δεν αλλάζουν τιµή. Π.χ CMP AL,6 JA a ; ιακλάδωση αν το περιεχόµενο του AL > 6.. 30

a: Παρόµοια µε την CMP είναι η εντοµή TEST η οποία συντάσσεται µε δύο τελεστές (προορισµός, προέλευση) και εκτελεί λογικό AND µεταξύ των δύο τελεστών (Byte ή λέξεων) ενηµερώνει τις σηµαίες, αλλά δεν επιστέφει αποτέλεσµα (δεν αλλοιώνονται οι τελεστές). Η εντολή TEST είναι χρήσιµη για τον έλεγχο της τιµής συγκεκριµένων bits ενός τελεστή και συνδυάζεται συνήθως µε την εντολή JNZ. Π.χ το παρακάτω τµήµα προγράµµατος ελέγχει αν ένας ακέραιος αριθµός διαιρείται ακριβώς, µε το 4. Παράδειγµα προγράµµατος υπ αριθµόν 7 :.MODEL SMALL ; µικρό µοντέλο µνήµης.code mov ax,@data mov ds,ax MOV AX,ARIT; Ο αριθµός στον συσσωρευτή TEST AX,0000000000000011h; έλεγχος αν είναι µηδέν τα δύο τελευταία bit JNZ NOT EVEN; αν δεν είναι άλµα στην εκτύπωση δεν είναι LEA DX,MHNHMA EINAI; εκτύπωση MOV AH,09 ; µηνύµατος είναι INT 21H Jmp TELOS NOT EVEN: LEA DX,MHNHMA DEN EINAI; εκτύπωση MOV AH,09 ; µηνύµατος INT 21H ; δεν είναι TELOS: mov ah,4ch; έξοδος int 21h ; από το πρόγραµµα.data MHNHMA EINAI db "4 is a divisor of arit",10,13,"$" MHNHMA DEN EINAI db "4 is not a divisor of arit",10,13,"$" arit dw 1201.stack 100h end Ακολουθεί Πίνακας των εντολών µε συνθήκη µαζί µε τα συνώνυµα τους καθώς και τις τιµές των σηµαιών σύµφωνα µε τις οποίες θα πραγµατοποιηθεί ή όχι διακλάδωση: 31

Όνοµα Περιγραφή είκτες που ελέγχονται JB/JNAE JAE/JNB JBE/JNA ιακλάδωση εάν είναι µικρότερο µη προσηµασµένο ιακλάδωση εάν δεν είναι µικρότερο µη προσηµασµένο ιακλάδωση εάν δεν είναι µεγαλύτερο µη προσηµασµένο CF=1 CF=0 CF=1 ή ZF=1 JA/JNBE ιακλάδωση εάν είναι µεγαλύτερο µη προσηµασµένο CF=0 και ZF=0 JE/JZ ιακλάδωση αν είναι ίσο ZF=1 JNE/JNZ ιακλάδωση αν είναι άνισα ZF=0 JL/JNGE ιακλάδωση εάν είναι µικρότερο προσηµασµένο SF<>OF JGE/JNL JLE/JNG ιακλάδωση εάν δεν είναι µικρότερο προσηµασµένο ιακλάδωση εάν δεν είναι µεγαλύτερο προσηµασµένο SF=OF ZF=1 ή SF<>OF JG/JNLE ιακλάδωση εάν είναι µεγαλύτερο προσηµασµένο JP/JPE ιακλάδωση εάν υπάρχει ισοτιµία ZF=O και SF = OF PF=1 JNP/JPO ιακλάδωση εάν δεν υπάρχει ισοτιµία PF=0 JS ιακλάδωση εάν αρνητικό αποτέλεσµα JNS ιακλάδωση εάν θετικό αποτέλεσµα JC ιακλάδωση εάν υπάρχει κρατούµενο SF=1 SF=0 CF=1 JNC ιακλάδωση εάν δεν υπάρχει κρατούµενο CF=0 JO ιακλάδωση εάν υπάρχει υπέρβαση κρατουµένου OF=1 32

JNO ιακλάδωση εάν δεν υπάρχει υπέρβαση κρατουµένου OF=0 Παρόλη την ευελιξία τους οι εντολές διακλαδώσεων υπό συνθήκη παρουσιάζουν τον περιορισµό ότι είναι διακλαδώσεις µεγέθους ενός προσηµασµένου byte. ηλαδή η ετικέτα διακλαδώσεις πρέπει να απέχει από το 128 έως +127 θέσεις (Bytes) από την δ/νση της επόµενης εντολής. Για µεγαλύτερου µεγέθους διακλαδώσεις γίνεται συνδυασµός µιας διακλάδωσης µε συνθήκη και µιας χωρίς συνθήκη. Παράδειγµα η µικρού µεγέθους διακλάδωση: CMP DL,7 JA A... A: Αντικαθίσταται µε την µεγάλου µεγέθους ισοδύναµη της: CMP DL,7 JNA B JMP A B:. A: 4.4 Εντολές βρόγχων επανάληψης Οι βρόγχοι είναι ένα τµήµα κώδικα το οποίο τελειώνει µε συνθήκη διακλάδωσης στην αρχή του. Κατ αυτόν τον τρόπο το τµήµα αυτό εκτελείται συνεχώς έως ότου ικανοποιηθεί η συνθήκη. Οι βρόγχοι είναι πολύ χρήσιµοι για τον χειρισµό πινάκων, εισαγωγή αλφαριθµητικών από το πληκτρολόγιο, έλεγχο της κατάστασης θυρών εισόδου ή εξόδου, εµφάνιση αλφαριθµητικών στην οθόνη, καθυστερήσεις κ.α. Ο 8086 διαθέτει ορισµένες χρήσιµες ειδικές εντολές βρόγχων επανάληψης : LOOP, LOOPE, LOOPNE και JCXZ. Συντάσσονται όλες µε ένα τελεστή που είναι η ετικέτα διακλάδωσης. Όλες ελέγχουν την τιµή του καταχωρητή CX ο οποίος χρησιµεύει σαν µετρητής βρόγχων επανάληψης. Ειδικότερα η LOOP µειώνει κατά 1 τον CX και εάν η τιµή του δεν είναι 0 πραγµατοποιείται η διακλάδωση, αλλιώς εκτελείται η εντολή που βρίσκεται µετά την LOOP. Π.χ το παρακάτω τµήµα κώδικα τυπώνει 18 χαρακτήρες ενός µηνύµατος, στην οθόνη. mhnhma DB ΤΕΛΟΣ ΠΡΟΓΡΑΜΜΑΤΟΣ.... mov cx,18; µετρητής επανάληψης lea bx,mhmnhma; ενεργός δ/νση ή µετατόπιση της µεταβλητής ; mhnhma στον καταχωρητή δείκτη bx 33