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

Σχετικά έγγραφα
ΕΡΓΑΣΤΗΡΙΟ ΑΡΧΙΤΕΚΤΟΝΙΚΗΣ Η/Υ

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

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

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

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

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

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

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

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

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

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

Προηγμένοι Μικροεπεξεργαστές. Φροντιστήριο 2 Addressing

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Μηχανοτρονική. Τμήμα Μηχανικών Παραγωγής και Διοίκησης 7 ο Εξάμηνο,

Αρχιτεκτονική x86(-64) 32-bit και 64-bit λειτουργία. Αρχιτεκτονική x86(-64) Αρχιτεκτονική επεξεργαστών x86(-64) Αρχιτεκτονικές Συνόλου Εντολών (ΙΙ)

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

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

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

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

Προηγμένοι Μικροεπεξεργαστές. Φροντιστήριο 4 Real Mode Interrupts

ΤΕΧΝΙΚΕΣ ΑΥΞΗΣΗΣ ΤΗΣ ΑΠΟΔΟΣΗΣ ΤΩΝ ΥΠΟΛΟΓΙΣΤΩΝ I

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

ΜΥΥ- 402 Αρχιτεκτονική Υπολογιστών ARM και x86

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

ΗΥ 232 Οργάνωση και Σχεδίαση Υπολογιστών. Intel x86 ISA. Νίκος Μπέλλας Τμήμα Ηλεκτρολόγων Μηχανικών και Μηχανικών ΗΥ

Προηγμένοι Μικροεπεξεργαστές. Εργαστήριο 4 - Editor

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

Multi Cycle Datapath. Αρχιτεκτονική Υπολογιστών. 5ο εξάμηνο ΣΗΜΜΥ ακ. έτος: Νεκ. Κοζύρης

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

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

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

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

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

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

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

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

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

Προηγμένοι Μικροεπεξεργαστές. Εργαστήριο 1 Hello World

Εθνικό Μετσόβιο Πολυτεχνείο Σχολή Ηλεκτρολόγων Μηχανικών - Μηχανικών Υπολογιστών. ΑΡΧΙΤΕΚΤΟΝΙΚΗ ΥΠΟΛΟΓΙΣΤΩΝ Νεκτάριος Κοζύρης ΑΡΙΘΜΗΤΙΚΕΣ ΠΡΑΞΕΙΣ

Η διασύνδεση Υλικού και λογισμικού David A. Patterson και John L. Hennessy. Chapter 5. Ο επεξεργαστής: διαδρομή δεδομένων και μονάδα ελέγχου

Εισαγωγή στους Ηλεκτρονικούς Υπολογιστές. 5 ο Μάθημα. Λεωνίδας Αλεξόπουλος Λέκτορας ΕΜΠ. url:

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

MIPS functions and procedures

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

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

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

Επεξεργαστής Υλοποίηση ενός κύκλου μηχανής

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

ΑΡΙΘΜΗΤΙΚΗ ΓΙΑ ΥΠΟΛΟΓΙΣΤΕΣ

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

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

ΘΕΜΑΤΑ & ΕΝΔΕΙΚΤΙΚΕΣ ΛΥΣΕΙΣ

Single Cycle Datapath. Αρχιτεκτονική Υπολογιστών. 5ο εξάμηνο ΣΗΜΜΥ ακ. έτος: Νεκ. Κοζύρης

και η µονάδα ελέγχου (control) O επεξεργαστής: Η δίοδος δεδοµένων (datapath) Εντολές διακλάδωσης (branch beq, bne) I Type Σχεδίαση datapath

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

Chapter 3 Αριθμητική Υπολογιστών

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

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

Εισαγωγή στην Πληροφορική & τον Προγραμματισμό

Υπάρχουν δύο τύποι μνήμης, η μνήμη τυχαίας προσπέλασης (Random Access Memory RAM) και η μνήμη ανάγνωσης-μόνο (Read-Only Memory ROM).

Σύγχρονες Αρχιτεκτονικές Υπολογιστών

O επεξεργαστής: Η δίοδος δεδομένων (datapath) και η μονάδα ελέγχου (control)

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

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

Επεξεργαστής Υλοποίηση ενός κύκλου μηχανής

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

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

! Εάν ο αριθμός διαθέτει περισσότερα bits, χρησιμοποιούμε μεγαλύτερες δυνάμεις του 2. ! Προσοχή στη θέση του περισσότερο σημαντικού bit!

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

Τελική Εξέταση, Απαντήσεις/Λύσεις

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

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

Πράξεις με δυαδικούς αριθμούς

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

Ποια πρόταση είναι αληθής για τον Μ/Ε 8088: Είναι Μ/Ε 16bit, LSI, 40 pins, 20 γραμμές διευθύνσεων, 8 γραμμές δεδομένων

Transcript:

Συστήματα Μικροϋπολογιστών Η αρχιτεκτονική του με Intel 8086 Υπεύθυνος Μαθήματος: K. ΠΕΚΜΕΣΤΖΗ

Άδεια Χρήσης Το παρόν εκπαιδευτικό υλικό υπόκειται σε άδειες χρήσης Creative Commons. Για εκπαιδευτικό υλικό, όπως εικόνες, που υπόκειται σε άδεια χρήσης άλλου τύπου, αυτή πρέπει να αναφέρεται ρητώς.

Σήματα και ακίδες του 8086Περιγραφή GND AD14 AD13 AD12 AD11 AD10 AD9 AD8 AD7 AD6 AD5 AD4 AD3 AD2 AD1 AD0 NMI INTR CLK GND Vcc AD15 BHE/S7 MN/MX RD LOCK RQ/GT0 RQ/GT1 S2 S1 S0 QS0 QS1 TEST READY RESET (HOLD) (HLDA) (WR) (M/IO) (DT/R) (DEN) (ALE) (INTA) Ελεγχος Ρολόι Γείωση Ground Διευθυνση\Δεδομένα Διεύθυνση/Ελεγχος Διεύθυνση/Δεδομένα Τάση Τροφοδοσίας, +5 8086 CPU 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 40 39 38 37 36 35 34 33 32 31 30 29 28 27 26 25 24 23 22 21 A16/S3 A17/S4 A18/S5 A19/S6 Σήματα Ελέγχου

Περιγραφή Σημάτων - Ακίδων του 8086 AD0-AD7 Στις ακίδες αυτές πολυπλέκονται τα 8 λιγότερα σημαντικά bit της διεύθυνσης (A0-A7) με τα αντίστοιχα των δεδομένων (D0-D7). AD8-AD15 για τον 8086 ή A8-A15 για τον 8088. A16/S3-A19/S6 Εδώ πολυπλέκονται τα τέσσερα σημαντικότερα bit του διαδρόμου διευθύνσεων με τα τέσσερα σήματα κατάστασης S3-S6. M / IO για τον 8086 ή M / IO για τον 8088. To σήμα αυτό δείχνει αν θα γίνει προσπέλαση σε κάποια θέση μνήμης ή σε πόρτα Ε/Ε. RD Δείχνει ότι ο μεπ εκτελεί κύκλο ανάγνωσης από τη μνήμη ή από πόρτα Ε/Ε. WR Δείχνει ότι ο μεπ εκτελεί κύκλο εγγραφής στη μνήμη ή σε πόρτα Ε/Ε. ALE Χρησιμοποιείται για το διαχωρισμό της διεύθυνσης από τα δεδομένα

Περιγραφή Σημάτων - Ακίδων του 8086 READY Διαβεβαίωση ότι η μεταφορά δεδομένων που ζητήθηκε θα ολοκληρωθεί. INTR Αίτηση διακοπής από κάποια περιφερειακή μονάδα. NMI Μη παρεμποδιζόμενη διακοπή (Non-maskable interrupt). INTA (INTerrupt Acknowledgement). Αναγνώριση διακοπής και αναμονή του αριθμού διακοπής. HOLD Εκπέμπεται από κάποιον άλλο συνεπεξεργαστή (bus master) ο οποίος ζητάει την παραχώρηση του διαδρόμου. HLDA (HoLD Acknowlegement). Αποτελεί απάντηση του 8086/88 στο σήμα HOLD και σημαίνει ότι παραχωρεί το διάδρομο. BHE/S7 (μόνο στον 8086). Το σήμα BHE (Byte High Enable) με το bit Α0 καθορίζει αν θα γίνει προσπέλαση σε λέξη ή byte και επίσης αν αρχίζει σε άρτια ή περιττή διεύθυνση.

Περιγραφή Σημάτων - Ακίδων του 8086 SS0 (μόνο στον 8088). Χρησιμοποιείται σε συνδυασμό με τα σήματα M / IO και DT / R για να καθοριστεί αν ο τρέχων κύκλος διαδρόμου (bus cycle) είναι κύκλος εγγραφής στη μνήμη, εγγραφής σε πόρτα Ε/Ε, ανάγνωσης από τη μνήμη, ανάγνωσης από πόρτα Ε/Ε, ή κύκλος αναγνώρισης διακοπής. RESET Προκαλείται επανεκκίνηση του συστήματος από τη διεύθυνση FFFF0H. TEST Εξετάζεται από την εντολή WAIT του 8086/88 αν είναι 0 ο επεξεργαστής συνεχίζει αλλιώς εισάγεται κατάσταση αναμονής ("Idle" state). DEN (Data ENable). Χρησιμοποιείται σαν είσοδος επίτρεψης (enable input) στον πομποδέκτη (tranceiver) δεδομένων 8286/8287. DT / R (Data Transmit/Recieve). Χρησιμοποιείται σαν είσοδος για τον πομποδέκτη 8286/8287 για να καθορίσει άν θα γίνει αποστολή ή λήψη δεδομένων.

Περιγραφή Σημάτων - Ακίδων του 8086 Σε "διάταξη μεγίστου συστήματος" έχουμε τα ακόλουθα σήματα: S0, S1 και S2 Δείχνουν τον τύπο του επόμενου κύκλου δηλαδή αν θα είναι ανάγνωσης ή εγγραφής στη μνήμη ή σε πόρτα Ε/Ε, αναγνώριση διακοπής, σταμάτημα του επεξεργαστή (halt) ή τέλος άεργος κύκλος (idle). LOCK Δείχνει στους υπόλοιπους συνεπεξεργαστές (bus masters) ότι δεν μπορούν να πάρουν τον έλεγχο του διαδρόμου. Ενεργοποιείται από την εντολή-πρόθεμα (prefix instruction) "LOCK". QS0, QS1 (Queue Status). Τα σήματα αυτά παρέχουν την κατάσταση της ουράς και έτσι επιτρέπουν την εξωτερική ιχνηλάτησή της (external queue tracing). RQ / GT0, RQ / GT1 Τα σήματα αυτά χρησιμοποιούνται σε διατάξεις πολυεπεξεργαστών.

Εσωτερική Αρχιτεκτονική του με 8086 C-BUS AX BX CX DX FLAGS AH BH CH DH B-BUS AL BL CL DL Σ ES CS SS DS IP BUS INTERFACE UNIT ALU A-BUS 6 5 4 3 2 1 CONTROL Όλοι οι καταχωρητές είναι των 16 bits. Οι AX, BX, CX, DX χωρίζονται σε δύο καταχωρητές των 8 bit ο καθένας DI SI BP SP (IP) EXECUTION UNIT

Οι Καταχωρητές του 8086 (Α) Καταχωρητές γενικής χρήσης H - File L - File 7 0 7 0 ΑΧ AH AL ΣΥΣΣΩΡΕΥΤΗΣ ΓΕΝΙΚΟΙ ΚΑΤΑΧΩΡΗΤΕΣ (HL Group) ΒΧ CX BH CH BL CL ΒΑΣΗ ΜΕΤΡΗΤΗΣ DX DH DL ΔΕΔΟΜΕΝΑ

Οι Καταχωρητές του 8086 (Β) Καταχωρητές ειδικής χρήσης 15 0 ΚΑΤΑΧΩΡΗΤΕΣ ΔΕΙΚΤΩΝ (P&I Group) SP BP SI DI IP ΔΕΙΚΤΗΣ ΣΤΟΙΒΑΣ ΔΕΙΚΤΗΣ ΒΑΣΗΣ ΔΕΙΚΤΗΣ ΠΡΟΕΛΕΥΣΗΣ ΔΕΙΚΤΗΣ ΠΡΟΟΡΙΣΜΟΥ 15 ΜΕΤΡΗΤΗΣ ΠΡΟΓΡΑΜΜΑΤΟΣ 0 P-GROUP I-GROUP Χρησιμοποιούνται μόνο για δεικτοδότηση και αναφορά στη μνήμη 15 0 CS ΤΜΗΜΑ ΠΡΟΓΡΑΜΜΑΤΟΣ ΚΑΤΑΧΩΡΗΤΕΣ ΤΜΗΜΑΤΩΝ (S GROUP) DS SS ΤΜΗΜΑ ΔΕΔΟΜΕΝΩΝ ΤΜΗΜΑ ΣΩΡΟΥ ES ΕΚΤΑΚΤΟ ΤΜΗΜΑ

Οι Καταχωρητές του 8086 (Γ) Ο Καταχωρητής Σημαιών (PSW/FLAGS) 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 O D I T S Z A P C CF: Carry (Κρατούμενο) PF: Parity (Ισοτιμία) AF: Auxiliary Carry (Βοηθητικό Κρατούμενο) ZF: Zero (Μηδέν) SF: Sign (Πρόσημο) TF: Trap (Βάζει τον με σε λειτουργ.single-step) IF: Interrupt Enable (Ενεργοποίηση Διακοπών) DF: Direction (Autoincrement / Autodecrement) OF: Overflow (Υπερχείλιση)

Μοντέλο προγραμματισμού του με 8088/86 (καταχωρητές των 16 bit) Γενικοί Καταχωρητές (16 bit) AX BX CX DX AH BH CH DH AL BL CL DL Συσσωρευτής Βάση Μετρητής Δεδομένων Καταχωρητές των Pointers και των δεικτών (16 bit) SP BP SI DI Pointer Σωρού Pointer Δείκτη Δείκτης Προέλευσης Δείκτης Προορισμού IP Μετρητής Προγράμματος Καταχωρητές Τμημάτων (16 bit) CS DS SS ES Τμήμα Προγράμματος Τμήμα Δεδομένων Τμήμα Σωρού Έκτακτο Τμήμα Σημαίες (16 bit) 15 7 0 O D I TF S Z A P C

Μοντέλο προγραμματισμού του με 80x86 (καταχωρητές των 32 bit) Γενικοί Καταχωρητές (32 bit) EAX EBX ECX EDX AH BH CH DH AL BL CL DL AX BX CX DX Γενικοί Καταχωρητές (16 bit) Καταχωρητές των Pointers και των δεικτών (32 bit) ESP EBP EDI ESI SP BP DI SI Καταχωρητές των Pointers και των δεικτών (16 bit) Καταχωρητές Τμημάτων (16 bit) CS DS ES SS FS GS IEP EFlags IP Flags Μετρητής Προγράμματος Σημαίες (32 bit)

Προσπέλαση μνήμης (Α) Προσπέλαση δεδομένου στον κατατμημένο λογικό χώρο διευθύνσεων του με 8086 Τμήμα Προγράμματος (64 KBytes) ΛΟΓΙΚΟΣ ΧΩΡΟΣ ΔΙΕΥΘΥΝΣΕΩΝ (256 Kbytes) Τμήμα Σωρού (64 Kbytes) Έμμεσος ορισμός του καταχωρητή τμήματος δεδομένων + 16 Offset(x) 0 Τμήμα Δεδομένων (64 Kbytes) Το αναφερόμενο δεδομένο Έκτακτο Τμήμα (64 Kbytes)

Προσπέλαση Μνήμης (Β) ΛΟΓΙΚΟΣ ΧΩΡΟΣ ΔΙΕΥΘΥΝΣΕΩΝ (256 Kbytes) Τμήμα Προγράμματος (64 KBytes) ΧΩΡΟΣ ΦΥΣΙΚΗΣ ΜΝΗΜΗΣ (1 Μbyte) FFFFF h ΕΚΤΑΚΤΟ ΤΜΗΜΑ (64Kbytes) Απεικόνιση του λογικού χώρου διευθύνσεων (256 KBytes) στον χώρο φυσικής μνήμης (1 Mbyte) ΛΟΓΙΚΗ ΔΙΕΥΘΥΝΣΗ Έμμεσος ορισμός του καταχωρητή τμήματος δεδομένων + 16 Offset(x) 0 Τμήμα Σωρού (64 Kbytes) Τμήμα Δεδομένων (64 Kbytes) Έκτακτο Τμήμα (64 Kbytes) CS DS SS ES ΠΙΝΑΚΑΣ ΑΠΕΙΚΟΝΙΣΗΣ (πάνω στον 8086) 00000 h ΤΜΗΜΑ ΣΩΡΟΥ (64Kbytes) ΤΜΗΜΑ ΔΕΔΟΜΕΝΩΝ (64Kbytes) ΤΜΗΜΑ ΠΡΟΓΡΑΜΜΑΤΟΣ (64Kbytes)

Η Σελιδοποίηση της Μνήμης 00000 0FFFF 64 KBytes 1 η σελίδα Ο καταχωρητής CS δείχνει ποια από τις 16 σελίδες είναι ενεργή 10000 1FFFF 64 KBytes 2 η σελίδα CS = 1000 F0000 FFFFF 64 KBytes 16 η σελίδα

Η μονάδα BIU (Bus Interface Unit) Περιέχει τον μηχανισμό μετατροπής λογικών BUS ΔΙΕΥΘΥΝΣΕΩΝ / ΔΕΔΟΜΕΝΩΝ (20 bits) διευθύνσεων σε φυσικές Latch της διεύθυνσης Φυσική BUS INTERFACE UNIT (BIU) 20 bits Ειδικός Αθροιστής διεύθυνση Μηχανισμός μετατροπής λογικών διευθύνσεων σε φυσικές TEMP (16 bits) 0000 TEMP (16 bits) Καταχωρητές Τμημάτων (Πίνακας Απεικόνισης) CS DS SS ES Κυκλώματα Επιλογής Τα πρώτα 16 bits της φυσικής διεύθυνσης τμήματος Το 16ψήφιο Offset (Από την εντολή ή από έναν γενικό καταχωρητή) Φυσική Διευθ.= 16xΚαταχωρητής Τμ. + Λογική Διευθ. Από την ALU ή το A-BUS

Κύκλοι διαδρόμων στον 8086 CLK AD0-AD15 T1 T2 T3 T4 Next Bus Cycle Address Float Data In/Out Float ALE BHE M/IO A16/S3 A19/S6 RD WR DT/R DEN Address Status

Κύκλος Διακοπής στον 8086 T1 T2 T3 T4 Ti T1 T2 T3 T4 ALE INTA AD0 - AD15 Float Type Vector Τ i : Κατάσταση που ο διάδρομος αργεί

ΔΙΑΚΟΠΕΣ ΥΛΙΚΟΥ DATA BUS Μικροεπεξεργαστής 8086 INT INTA Διάνυσμα Συσκευής 0-255 ΕΞΩΤΕΡΙΚΗ ΠΕΡΙΦΕΡΕΙΑΚΗ ΣΥΣΚΕΥΗ

Οι Διακοπές στον 8086 Τύπου 0 Διαίρεση με 0, ή υπερχείλιση κατά τη διαίρεση Τύπου 1 Βηματική εκτέλεση εντολών Τύπου 2 Μη παρεμποδιζόμενη διακοπή - NMI Τύπου 3 Προκαλείται από προγράμματα μέσω της εντολής CCH (software breakpoint) Τύπου 4 Προκαλείται από την INTO, όταν η σημαία OF είναι ενεργοποιημένη

Πίνακας Διακοπών FFFFF FFFF0 003FF 00000 Πρόγραμμα Εκκίνησης RESET... Πίνακας Διανυσμάτων Διακοπών 256 Διανύσματα Διακοπών 03FF 03FC 0084 0010 000C 0008 0004 0000 Διάνυσμα 255... Διάνυσμα 33... Διάνυσμα 4 Διάνυσμα 3 Διάνυσμα 2 Διάνυσμα 1 Διάνυσμα 0 Υπερχείληση - INTO Εντολή ΙΝΤ ενός byte Μη παρεμποδιζόμενη διακοπή - ΝΜΙ Βηματική εκτέλεση Διαίρεση με το μηδέν Ο πίνακας δείχνει τα διανύσματα διακοπής, καθώς και πώς από αυτά οδηγούμαστε στη ρουτίνα εξυπηρέτησης της διακοπής

Οργάνωση Μνήμης Η φυσική μνήμη του 8086 χωρίζεται σε δύο ίσα μέρη μεγέθους 0.5 Mbyte. Την πάνω στήλη (upper byte bank), από την οποία διαβάζεται ή γράφεται το πιο σημαντικό byte της λέξης, που διακινείται πάνω στις γραμμές D15-D8, (περιττές διευθύνσεις) και ενεργοποιούνται με το σήμα BHE (Byte High Enable). Την κάτω στήλη (lower byte bank), από την οποία διαβάζεται ή γράφεται το λιγότερο σημαντικό byte της λέξης που διακινείται πάνω στις γραμμές D7-D0 του διαδρόμου δεδομένων (άρτιες διευθύνσεις). Στην πάνω στήλη ανήκουν όλες οι θέσεις μνήμης με περιττή διεύθυνση. Μπορεί να επιλεγεί η μια ή και οι δύο στήλες ανάλογα με το αν θέλουμε να προσπελάσουμε ένα byte ή μια λέξη. Αυτό επιτυγχάνεται αν το σήμα BHE και το A0 του διαδρόμου διευθύνσεων λάβουν τις κατάλληλες τιμές όπως δείχνει ο πίνακας. BHE Α0 Προσπέλαση 0 0 ολόκληρη λέξη (αρχίζει σε άρτια διεύθυνση) 0 1 byte σε περιττή διεύθυνση (MSByte) 1 0 byte σε άρτια διεύθυνση (LSByte) 1 1 δεν επιλέγεται καμία θέση μνήμης

Διασύνδεση μνήμης στον με 8086 BHE Α0 Προσπέλαση 0 0 ολόκληρη λέξη (αρχίζει σε άρτια διεύθυνση) Διάδρομος Διευθύνσεων 0 1 byte σε περιττή διεύθυνση (MSByte) 1 0 byte σε άρτια διεύθυνση (LSByte) A19-A1 BHE ΜΝΗΜΗ (περιττές θέσεις) CS1 ΜΝΗΜΗ (άρτιες θέσεις) D15 - D8 D7 - D0 Διάδρομος Δεδομένων 1 1 δεν επιλέγεται καμία θέση μνήμης A0 CS0

Είδη & μορφές εντολών του 8086 (Α) Εντολές Διακίνησης Δεδομένων Γενικού Σκοπού: MOVE, POP, PUSH, EXCHANGE Χρήση Συσσωρευτή: IN, OUT, TRANSLATE Μετακίνηση διευθύνσεων και δεικτών: Load Effective Address LEA BX,addr Διακίνηση των Flags Εντολές Αριθμητικών Πράξεων Load Pointer LDS BX,dword ptr Πρόσθεση, αφαίρεση, πολ/μος, διαίρεση, αύξηση μείωση Χ, σύγκριση, κλπ. για δυαδικούς και δεκαδικούς (packed & unpacked) αριθμούς.

Είδη & μορφές εντολών του 8086 (Β) Εντολές λογικών πράξεων Οι γνωστές εντολές λογικών πράξεων AND, OR, XOR, και μια επιπρόσθετη, η TEST for specific bits που θέτει 1 στο επιλεγόμενο FLAG. Εντολές χειρισμού σειράς δεδομένων Εκτελούνται επαναληπτικά από το hardware (CX) φορές. Τα δεδομένα πρέπει να λαμβάνονται με βάση τον SI (DS) και να καταχωρούνται με βάση τον DI (ES).

Είδη & μορφές εντολών του 8086 (Γ) Εντολές μεταφοράς ελέγχου Άμεση ή έμμεση μεταφορά ελέγχου: JUMP, CALL, RETURN (ενδοτμηματική ή διατμηματική) Self-relative addressing (+128 εως 126) Χειρισμός σημάτων διακοπής Σειρά δεδομένων: LOOP, LOOPZ, LOOPNZ, JCXZ Εντολές ελέγχου του με HALT, WAIT ESCAPE: Μεταφορά ελέγχου σε εξωτερικό με LOCK: Πρόθεμα για διατήρηση ελέγχου στο bus

Τρόποι Αναφοράς στη Μνήμη Άμεση: MOV AX,568 ; AX 568 Απευθείας: MOV AX,[1000Η] ; DS:AL [1000H], DS:AH [1001H] Έμμεση: MOV AL,[BP] ;AL SS:[BP] MOV CX,CS:[DI] ;CL CS:[DI], CH CS:[DI+1] MOV [BX],800H ;DS:[BX] 00H, DS:[BX+1] 08H MOV AH,[BP+180] ;AH SS:[BP+180] MOV [BX+2000H],DI ;DS:[BX+2001:BX+2000] DI MOV ES:[DI+30000],20H;ES:[DI+30000] 20H MOV CX,[SI-1800H] ;CX DS:[SI-17FFH:SI-1800H] MOV BX,[BX+DI] ;BX DS:[BX+DI+1:BX+DI] MOV [BP+SI],DL ;SS:[BP+SI] DL MOV DS:[BP+DI],30000 ;DS:[BP+DI+1:BP+DI] 30000 MOV AX,[BX+SI+1FH] ;AX DS:[BX+SI+20H:BX+SI+1FH] MOV CS:[BP+DI-108],BH ;CS:[BP+DI-108] BH

ΕΝΤΟΛΕΣ ΜΕΤΑΚΙΝΗΣΗΣ ΔΕΔΟΜΕΝΩΝ DATA TRANSFER INSTRUCTIONS MOV Move CMOVcc Conditional move (if cc true) XCHG Exchange BSWAP Byte swap XADD Exchange and add CMPXCHG Compare and exchange CMPXCHG8B Comp. and exch. 8 bytes PUSH Push onto stack - POP Pop off of stack PUSHA/PUSHAD Push general-purpose registers onto stack POPA/POPAD Pop general-purpose registers from stack IN Read from a port - OUT Write to a port CWD/CDQ Convert word to doubleword/ Dword to quadword CBW/CWDE Convert byte to word/word to Dword in EAX register MOVSX Move and sign extend - MOVZX Move and zero extend

ΕΝΤΟΛΕΣ ΜΕΤΑΚΙΝΗΣΗΣ ΥΠΟ ΣΥΝΘΗΚΗ Conditional move CMOVcc if cc true Για προσημασμένους και μη προσημασμένους: CMOVE /CMOVZ equal/zero, CMOVNE/CMOVNZ not equal/not zero, CMOVC carry, CMOVNC not carry, CMOVP/CMOVPE parity even, CMOVNP/CMOVPO parity odd Για μη προσημασμένους: CMOVA/CMOVNBE above/not below or equal, CMOVAE/CMOVNB above or equal /not below, B/NAE below/not above or equal, BE/NA below or equal/not above Για προσημασμένους: CMOVG/CMOVNLE greater/not less or equal, CMOVGE/CMOVNL greater or equal /not less, CMOVL/CMOVNGE less/not greater or equal, CMOVLE/CMOVNG less or equal /not greater, CMOVO overflow, CMOVNO not not overflow, CMOVS sign (negative), CMOVNS sign (non-negative)

ΑΡΙΘΜΗΤΙΚΕΣ ΕΝΤΟΛΕΣ BINARY ARITHMETIC INSTRUCTIONS ADD Integer add - ADC Add with carry SUB Subtract - SBB Subtract with borrow MUL Unsigned multiply - IMUL Signed multiply DIV Unsigned divide - IDIV Signed divide INC Increment - DEC Decrement NEG Negate - CMP Compare DECIMAL ARITHMETIC DAA Decimal adjust after addition DAS Decimal adjust after subtraction AAA ASCII adjust after addition AAS ASCII adjust after subtraction AAM ASCII adjust after multiplication AAD ASCII adjust before division

ΕΝΤΟΛΕΣ ΛΟΓΙΚΗΣ, ΟΛΙΣΘΗΣΗΣ-ΠΕΡΙΣΤΡΟΦΗΣ, BIT-BYTE INSTRUCTIONS LOGIC INSTRUCTIONS AND And - OR Or - XOR Exclusive or - NOT Not SHIFT AND ROTATE INSTRUCTIONS SAR Shift arithmetic right - SHR Shift logical right SAL/SHL Shift arithmetic left/shift logical left SHRD Shift right double - SHLD Shift left double ROR Rotate right - ROL Rotate left RCR Rotate through carry right - RCL Rotate through carry left BIT AND BYTE INSTRUCTIONS BT Bit test BTS Bit test and set - BTR Bit test and reset BTC Bit test and complement BSF Bit scan forward - BSR Bit scan reverse SETcc Conditional Set byte TEST Logical compare

ΤΟΠΟΘΕΤΗΣΗ BYTE ΥΠΟ ΣΥΝΘΗΚΗ Conditional Set byte: SETcc if cc true Για προσημασμένους και μη προσημασμένους: SETE /SETZ Set byte if equal/zero, SETNE/SETNZ not equal/not zero, SETC carry, SETNC not carry, SETP/SETPE parity even, SETNP/SETPO parity odd Για μη προσημασμένους: SETA/SETNBE above/not below or equal, SETAE/SETNB above or equal /not below, B/NAE below/not above or equal, BE/NA below or equal/not above Για προσημασμένους: SETG/SETNLE greater/not less or equal, SETGE/SETNL greater or equal /not less, SETL/SETNGE less/not greater or equal, SETLE/SETNG less or equal /not greater, SETO overflow, SETNO not not overflow, SETS sign (negative), SETNS sign (non-negative)

ΕΝΤΟΛΕΣ ΜΕΤΑΦΟΡΑΣ ΕΛΕΓΧΟΥ CONTROL TRANSFER INSTRUCTIONS ΕΝΤΟΛΕΣ ΑΛΜΑΤΟΣ: JMP Jump Jcc Jump if condition cc true ΕΝΤΟΛΕΣ ΒΡΟΓΧΟΥ LOOP Loop with ECX counter LOOPZ/LOOPE Loop with ECX and zero/equal LOOPNZ/LOOPNE Loop with ECX and not zero/not equal ΕΝΤΟΛΕΣ ΚΛΗΣΗΣ ΚΑΙ ΕΠΙΣΤΡΟΦΗΣ ΡΟΥΤΙΝΩΝ CALL Call procedure RET Return - IRET Return from interrupt INT Software interrupt - INTO Interrupt on overflow BOUND Detect value out of range ENTER High-level procedure entry LEAVE High-level procedure exit

ΕΝΤΟΛΕΣ ΑΛΜΑΤΟΣ ΥΠΟ ΣΥΝΘΗΚΗ Conditional Jump: Jcc if cc true Για προσημασμένους και μη προσημασμένους: JE /JZ JUMP if equal/zero, JNE/JNZ not equal/not zero, JC carry, JNC not carry, JP/JPE parity even, JNP/JPO parity odd, JCXZ/JECXZ Jump register CX zero/jump register ECX zero Για μη προσημασμένους: JA/JNBE above/not below or equal, JAE/JNB above or equal /not below, B/NAE below/not above or equal, BE/NA below or equal/not above Για προσημασμένους: JG/JNLE greater/not less or equal, JGE/JNL greater or equal /not less, JL/JNGE less/not greater or equal, JLE/JNG less or equal /not greater, JO overflow, JNO not not overflow, JS sign (negative), JNS sign (nonnegative)

Εντολές σειράς δεδομένων STRING INSTRUCTIONS MOVS/MOVSB Move byte string - MOVSW word - MOVSD doubleword CMPS/MOVSB Compare byte string - CMPSW word - CMPSD Dword SCAS/MOVSB Scan byte string - SCASW word - SCASD doubleword LODS/LODSB Load byte string - LODSW word - LODSD doubleword STOS/STOSB Store byte string - STOSW word - STOSD doubleword REP Repeat while ECX not zero REPE/REPZ Repeat while equal/zero REPNE/REPNZ Repeat while not equal/not zero INS/INSB Input byte string from port - INSW word - INSD Dword OUTS/OUTSB Output byte string from port - OUTSW word - OUTSD Dword

FLAG & SEGMENT REGISTER INSTRUCTIONS FLAG CONTROL INSTRUCTIONS STC Set carry flag - CLC Clear the carry flag CMC Complement the carry flag CLD Clear the direction flag - STD Set direction flag LAHF Load flags into AH register - SAHF Store AH register into flags PUSHF/PUSHFD Push EFLAGS onto stack POPF/POPFD Pop EFLAGS from stack STI Set interrupt flag - CLI Clear the interrupt flag SEGMENT REGISTER INSTRUCTIONS LDS Load far pointer using DS - LES Load far pointer using ES LFS Load far pointer using FS - LGS Load far pointer using GS LSS Load far pointer using SS MISCELLANEOUS INSTRUCTIONS LEA Load effective address NOP No operation

Εντολές Μετακίνησης Δεδομένων (A) MOV D, S (Μετακίνησε) reg reg (8,16,32 bit) MOV AH, BL reg mem MOV AX, [8010H] mem reg MOV [8010H], BP reg idata MOV SI, 8010H mem idata MOV [8010H], 8010H mem [BX], [BX+4], [SI], [SI-6], [BP+SI], [BP+SI+20] XCHG D, S (Αντάλλαξε) reg reg XCHG AL, BH reg mem XCHG DX, [SI] mem reg XCHG [8010H], DL

Εντολές Μετακίνησης Δεδομένων (B) LAHF Μεταφέρονται οι σημαίες (8 LSB) στον AH 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 O D I T S Z A P C SAHF Μεταφέρεται ο καταχωρητής AH στα 8 χαμηλότερης αξίας bits των σημαιών (FLAGS) PUSH reg Μεταφέρεται το περιεχόμενο του καταχωρητή reg στη στοίβα POP reg Μεταφέρεται το δεδομένο στην κορυφή της στοίβας στον καταχωρητή reg

Εντολές Μετακίνησης Δεδομένων (Γ) LEA reg, addr- mem (Φόρτωσε την ενεργό διεύθυνση) LEA BX, address LEA CX, [BX][DI] Αντί MOV AX, [ADDRESS] ή OFFSET ADDRESS LEA BX, ADDRESS MOV AX, [BX] ή WORD PTR[BX]

ΕΝΤΟΛΕΣ OFFSET, PTR OFFSET - Η εντολή αυτή υπολογίζει τη σχετική διεύθυνση μέσα στο τμήμα (offset) μιας μεταβλητής. Παράδειγμα: MOV BX, OFFSET VAR Με την εντολή αυτή η διεύθυνση (offset) της μεταβλητής VAR υπολογίζεται και αποθηκεύεται στον BX. Το ίδιο γίνεται και με την εντολή LEA του 8088/86. LEA BX, VAR (address) PTR - Με την οδηγία αυτή καθορίζεται σε μια εντολή, αν ένα από τα ορίσματά της το οποίο είναι θέση μνήμης, είναι μήκους μιας λέξης ή ενός byte, όταν αυτό δεν είναι προφανές. Παράδειγμα: INC PTR WORD [BX], DEC PTR BYTE [BX] Εδώ είναι αναγκαίο να καθοριστεί, αν η θέση μνήμης της οποίας το περιεχόμενο θα αυξηθεί κατά 1, είναι μήκους ενός ή δύο bytes. Αντίθετα στην εντολή ADD AL, [BX] αυτό είναι προφανές από το όρισμα AL, που είναι του ενός byte.

Εντολές Μετακίνησης Δεδομένων (Δ) Load Data Segment LDS reg, addr-mem reg [mem; mem+1], DS [mem+2; mem+3] Load Extra Segment LES reg, addr-mem reg [mem; mem+1], ES [mem+2; mem+3] LDS BX, WORD PTR[SI] LES BX, WORD PTR[SI] BX [SI; SI+1], DS [SI+2;SI+3] BX [SI; SI+1], ES [SI+2;SI+3]

Εντολές Μετακίνησης Δεδομένων (Δ) XLAT mem AL DS:[BX+AL] MOV AL, mem MOV BX, OFFSET TABLE ; Από 0 ως 15 XLAT... ; Μεταφέρεται ένας αριθμός ; AL DS:[BX+AL] TABLE DB 0 1 2 3 4 5 6 7 8 9 A B C D E F

Αριθμητικές Εντολές (Α) ADD d, s (Πρόσθεση) d {s+d} ADC d, s (Πρόσθεση με κρατ.) d {C+s+d} reg idata ADD AL,0E3H mem idata ADD [BP], 0E3H reg reg ADD AL,BH reg mem ADD BP, [8010H] mem reg ADD [8010H], BP SUB d, s (Αφαίρεση) d {d-s} SBB d, s (Αφαίρεση με δανεικό) d {d-s-c}

Αριθμητικές Εντολές (Β) INC reg ή mem (Αύξηση) d {d+1} DEC reg ή mem (Ελάττωση) d {d-1} NEG reg ή mem (Αναστροφή) d {-d} INC AL DEC PTR WORD[BP] CMP destination, source (Εντολή Σύγκρισης) {d-s} d>s d=s d<s CF=0 & ZF=0 CF=0 & ZF=1 CF=1 & ZF=0 Γίνεται η πράξη {d-s} χωρίς να καταχωρείται το αποτέλεσμα

Αριθμητικές Εντολές (Γ) MUL s (Πολλαπλασιασμός) Προέλευση 8bit Προέλευση 16bit ΑL ΑH ΑL ΑH ΑL DH DL ΑH ΑL DIV s (Διαίρεση) ΑH ΑL Προέλευση 8bit ΑΗ ΑL s reg / mem (όχι idata) DH DL ΑH ΑL Προέλευση 16bit ΑH ΑL DH DL

Εντολές Λογικών Πράξεων NOT d (Αναστροφή) AND d, s (Λογικό ΚΑΙ) d {d and s} OR d, s (Λογικό Ή) d {d or s} XOR d, s (Αποκλειστικό Ή) d {d s} TEST d, s {d and s} (έλεγχος) Τα d, s όχι ταυτόχρονα δύο θέσεις μνήμης H ΤΕST εκτελεί λογικό ΚΑΙ, ενημερώνει τις σημαίες χωρίς όμως να καταχωρεί το αποτέλεσμα

DECIMAL ARITHMETIC DAA Decimal adjust after addition: Αν AL [3-0] >9 ή ACF=1 τότε AL AL+6 και αν AL [7-4] >9 ή CF=1 τότε AL AL+60 DAS Decimal adjust after subtraction: Αν AL [3-0] >9 ή ACF=1 τότε AL AL-6 και αν AL [7-4] >9 ή CF=1 τότε AL AL- 60 AAA ASCII adjust after addition: Για μη-συμπτυγμένους BCD ή ASCII συμμετέχει μόνο ο καταχ. AL [3-0] (δηλ. μόνο AL [3-0] + 6) AAS ASCII adjust after subtraction: Όπως με AAA (μόνο AL [3-0] -6) AAM Adjust after multiplication: Το γινόμενο P δυο μη-συμπτυγμένων BCD αριθμών δίνει αποτέλεσμα που χωράει στον AL. Για να μετατραπεί σε μορφή μη-συμπτυγμένη BCD εκτελείται η AAM. Το αποτέλεσμα του γινομένου είναι: P [3-0] AL και P [7-4] AH Υλοποιείται ως εξής: Πηλίκο AL/0AH AH και το Υπόλοιπο AL AAD Adjust before division: Πριν τη διαίρεση του ΑΧ που έχει τα δυο ψηφία του διαιρετέου σε μη-συμπτυγμένη BCD μορφή στους κατ. AL, AH υπολογίζουμε το δυαδικό ισοδύναμο. Ο μηχανισμός της AAD είναι ο εξής: (AH*10 +AL) AL και 0 AH. Συνέχεια ακολουθεί κανονική διαίρεση.

ΕΝΤΟΛΗ INput IN συσσωρευτής, πόρτα Μεταφέρει δεδομένα από μια πόρτα I/O προς τον συσσωρευτή δηλαδή τον καταχωρητή AX αν η πόρτα είναι των 16 bits ή τον AL αν η πόρτα είναι των 8 bits. Η εντολή IN έχει δύο διαφορετικές μορφές ανάλογα με το τι είναι το όρισμα "πόρτα" της εντολής. Αν αυτό είναι αριθμός, τότε αυτή είναι η διεύθυνση της πόρτας απ' όπου θα διαβαστούν τα δεδομένα, οπότε έχουμε την εντολή IN με τη μορφή της σταθερής πόρτας (fixed port format). Το όρισμα "πόρτα" στην εντολή IN μπορεί να είναι ο καταχωρητής DX, ο οποίος περιέχει τη διεύθυνση της πόρτας - μορφή μεταβλητής πόρτας (variable port format) με τη διεύθυνση της πόρτας να καθορίζεται δυναμικά. Κατά την εκτέλεση της εντολής δεν επηρεάζεται καμιά σημαία. Παραδείγματα: IN AL,0C8H IN AX,34H IN AL,DX IN AX,DX Στις δύο πρώτες εντολές έχουμε την εντολή IN με τη μορφή της σταθερής πόρτας, ενώ στις δύο επόμενες με τη μορφή της μεταβλητής πόρτας.

ΕΝΤΟΛΗ OUTput OUT πόρτα, συσσωρευτής Μεταφέρει δεδομένα από τον συσσωρευτή προς μια πόρτα εξόδου. Ο συσσωρευτής είναι ο AX, αν πρόκειται για πόρτα των 16 bits, ή ο AL αν πρόκειται για πόρτα των 8 bits. Και εδώ, όπως συμβαίνει και με την εντολή IN, ανάλογα με το αν το όρισμα "πόρτα" είναι αριθμός ή ο καταχωρητής DX, έχουμε την εντολή OUT με τη μορφή της σταθερής και της μεταβλητής πόρτας. Κατά την εκτέλεση της εντολής δεν επηρεάζεται καμιά σημαία. Παραδείγματα: OUT 0C8H,AL OUT 34H,AX OUT DX,AL OUT DX,AX Στις δύο πρώτες εντολές έχουμε την εντολή OUT με τη μορφή της σταθερής πόρτας, ενώ στις δύο επόμενες με τη μορφή της μεταβλητής πόρτας.

Εντολές Ολίσθησης & Περιστροφής Ολίσθηση (αριθμητική) SAL AX, 1 SHR BX, CL SAL d, 1 ή cl ΑΡΙΣΤΕΡΑ Mε κρατούμενο SAR d, 1 ή cl ΔΕΞΙΑ Με κρατούμενο SHL d, 1 ή cl ΑΡΙΣΤ. Με κρατούμενο ίδια με την SAL SHR d, 1 ή cl ΔΕΞΙΑ Με κρατούμενο και sign ext. Περιστροφή RCL AX, 1 ROR BX, CL RCL d, 1 ή cl ΑΡΙΣΤΕΡΑ Mε κρατούμενο RCR d, 1 ή cl ΔΕΞΙΑ Με κρατούμενο ROL d, 1 ή cl ΑΡΙΣΤΕΡΑ Χωρίς κρατούμενο ROR d, 1 ή cl ΔΕΞΙΑ Χωρίς κρατούμενο

Εντολές Σειράς Δεδομένων (String) DF=1 SI=SI-1 ή -2 Source Index SI SI=SI+1 ή +2 DF=0 DS Φόρτωση LODSB LODSW LODS Address SI AL ή AX Μετακίνηση MOVSB MOVSW Αποθήκευση STOSB STOSW STOS PTR WORD ή BYTE Address DI MOVS Address1 Address2 DI SI ES DF=1 DI=DI+1 ή +2 Destination Index DI DI=DI+1 ή +2 DF=0 DF=1 Source Index SI DS Σύγκριση CMPSB CMPSW AL ή AX Σύγκριση SCASB SCASW + - + - ES DF=1 Destination Index DI DF=0 flags flags DF=0

Προθέματα Επανάληψης REP:Η εντολή string που ακολουθεί επαναλαμβάνεται CX φορές. Ο CX ελαττώνεται σε κάθε βήμα μέχρι να μηδενιστεί. REPNZ (REPNE) H εντολή επαναλαμβάνεται μέχρι CX=0 ή όσο ZF=0 (δηλαδή επαναλαμβάνεται όσο δεν είναι ίσα τα συγκρινόμενα ή μηδέν το αποτέλεσμα). REPZ (REPE) Η εντολή επαναλαμβάνεται μέχρι CX=0 ή όσο ZF=1 (δηλαδή επαναλαμβάνεται όσο είναι ίσα τα συγκρινόμενα ή μηδέν το αποτέλεσμα). ; Το πρόγραμμα μετακινεί πίνακα 200 λέξεων από ; τη διεύθυνση DS:500 στη θέση ES:1000 MOV AX, DS MOV ES, AX ; ES DS CLD ; Μηδενισμός της σημαίας DF=0 MOV SI, 500 MOV DI, 1000 MOV CX, 200 REP MOVSW

Εντολές Άλματος Άλμα χωρίς συνθήκη : JMP Διεύθυνση (16 bit) Η Διεύθυνση είναι σχετική και δίνεται σε μορφή συμπληρώματος ως προς 2. Έχει μέγιστη απόσταση άλματος -32766 έως +32768 Εντολές Άλματος υπό συνθήκη: Όμοια η Διεύθυνση είναι σχετική. Επιτρέπουν μέγιστη απόσταση άλματος -126 έως +128 (8 bit) Για προσημασμένους JG(JNLE) Άλμα για μεγαλύτερο (Greater/Not Less Equal) JGE(JNL) Άλμα για μεγαλύτερο ή ίσο (Greater OR Equal/Not Less) JL(JNGE) Άλμα για μικρότερο (Less/Not Greater Not Equal) JLE(JNG) Άλμα για μικρότερο ή ίσο (Less or Equal/Not Greater) JO/JNO Άλμα για υπερχείλιση/μη υπερχείλιση(overflow/not Overflow) JS/ JNS Άλμα για αρνητικό/θετικό (Sign/Not Sign)

Εντολές Άλματος Εντολές Άλματος υπό συνθήκη Για μη προσημασμένους JA(JNBE) Άλμα μεγαλύτερο (Above/Not Below nor Equal) JAE(JNB) Άλμα για μεγαλύτερο ή ίσο (Above or Equal/Not Below) JB(JNAE) Άλμα για μικρότερο (Below/Not Above nor Equal) JBE(JNA) Άλμα για μικρότερο ή ίσο (Below or Equal/Not Above) Για προσημασμένους και μη προσημασμένους JC/ JNC Άλμα για κρατούμενο (Carry/ No Carry) JE(JZ)/JNE(JNZ) Άλμα για ίσο/άνισο (Equal/Not Equal) JP(JPE)/ JNP(JPO) Άλμα για άρτια/περιττή ισοτιμία (Parity Even/Odd) JCXZ Άλμα αν CX=0

Εντολές Άλματος ADDR1: JNZ ADDR1... ; Η απόσταση άλματος δεν μπορεί να είναι μεγαλύτερη ; από +, -128 bytes Για να το επιτύχουμε θα χρησιμοποιήσουμε εντολή υπό συνθήκη σε συνδυασμό με την εντολή JMP ως εξής: JZ JMP CONTINUE:... ADDR1: CONTINUE ADDR1 ; Απόσταση μεγαλύτερη από 128 bytes

Εντολές Βρόχου Εντολή LOOP, που μπορεί να χρησιμοποιηθεί και υπό συνθήκη με τη μορφή LOOPZ, LOOPNZ εκτελεί τόσες φορές διακλάδωση δηλ. το βρόχο όσες δείχνει ο καταχωρητής CX Πχ. ο υπολογισμός της δύναμη 3 5 μπορεί να γίνει ως εξής: MOV CX,5 ; Αριθμός επανάληψης MOV AX,1 MOV BL,3 AGAIN: MUL BL ; 3 5 =243 χωράει στον AL LOOP AGAIN ; Εκτελεί 5 φορές διακλάδωση (CX=5) HLT ; Κάθε φορά ελαττώνει τον καταχωρητή CX κατά 1

Εντολές CALL CALL near IP old [SP-1:SP-2] CALL offset SP SP-2 CALL [DI] IP new [DI+1:DI] CALL far CS old [SP-1:SP-2] IP old [SP-3:SP-4] SP SP-4 CALL far CALL ADDR.DW CALL DWORD PTR[DI] CS new [DI+3:DI+2] IP new [DI+1:DI]

Εντολές RETURN RET near IP [SP+1:SP] SP SP+2 RET far IP [SP+1:SP] CS [SP+3:SP+2] SP SP+4

Εντολές Κλήσης και Επιστροφής Ρουτινών CALL NEAR routine SS:[SP-1:SP-2] IP old SP SP-2 IP new routine address CS Êýñéï Ðñüãñáì ì á Ñï õôßí á CS Í Ýï IP Í Ýï IP CALL routine RET CALL FAR routine SS:[SP-1:SP-2] CS old CS new routine code-segment SS:[SP-3:SP-4] IP old SP SP-4 IP new routine address RET IP CS SS (Ôì Þì á Óù ñï ý) SP' SP CALL routine

Εντολές Λογισμικών Διακοπών INT n και IRET 0000 IP Í Ýï CS Í Ýï 4n 4n+ 2 Ðßí áêáò Äéáí õóì Üôù í Äéáêï ð Þò CS 03FF IP Êýñéï Ðñüãñáì ì á INT n Ñï õôßí á Åî õð çñýôçóçò CS Í Ýï IP Í Ýï IRET IRET IP CS PSW SS (Ôì Þì á Óù ñï ý) SP' INT n SP

ΔΙΑΚΟΠΕΣ ΥΛΙΚΟΥ DATA BUS Μικροεπεξεργαστής 8086 INT INTA Διάνυσμα Συσκευής 0-255 ΕΞΩΤΕΡΙΚΗ ΠΕΡΙΦΕΡΕΙΑΚΗ ΣΥΣΚΕΥΗ

Πίνακας Διακοπών FFFFF FFFF0 003FF 00000 Πρόγραμμα Εκκίνησης RESET... Πίνακας Διανυσμάτων Διακοπών 256 Διανύσματα Διακοπών 03FF 03FC 0084 0010 000C 0008 0004 0000 Διάνυσμα 255... Διάνυσμα 33... Διάνυσμα 4 Διάνυσμα 3 Διάνυσμα 2 Διάνυσμα 1 Διάνυσμα 0 Υπερχείληση - INTO Εντολή ΙΝΤ ενός byte Μη παρεμποδιζόμενη διακοπή - ΝΜΙ Βηματική εκτέλεση Διαίρεση με το μηδέν Ο πίνακας δείχνει τα διανύσματα διακοπής, καθώς και πώς από αυτά οδηγούμαστε στη ρουτίνα εξυπηρέτησης της διακοπής

Εντολές Ελέγχου Μηχανής STC CF 1 CLC CF 0 STD DF 1 CLD DF 0 STI IF 1 CLI IF 0 CMC CF CF HLT Halt NOP No Operation

Παραδείγματα Προγραμματισμού του με 8086/88 1. Έλεγχος Δεκαεξαδικών Χαρακτήρων 2. Υπολογισμός απόλυτης τιμής και 1/Ν 3. Υπολογισμός της ποσότητας Ν! 4. Πλήθος εμφάνισης byte 3EH 5. Πλήθος θέσεων που διαφέρουν δυο περιοχές μήκους 100 bytes

Παράδειγμα 1 ο : Έλεγχος Δεκαεξαδικών Χαρακτήρων CMP AL, 30H ; Αν AL μικρότερο από 30Η JL ERROR ; διακλάδωση στη διεύθυνση ERROR CMP AL, 39H ; Αν AL μικρότερο ή ίσο τότε JLE HEX CMP AL, 41H ; χαρακτήρες Α ως F JL ERROR CMP AL, 46H JLE HEX CMP AL, 61H ; χαρακτήρες a ως f JL ERROR CMP AL, 66H JG ERROR ; Αν AL μεγαλύτερο από 61Η τότε ERROR HEX: STC ; αλλιώς HEX και CF=1 RET ERROR:CLC ; Αν δεν είναι HEX τότε CF=0 RET

Παράδειγμα 2ο : Υπολογισμός απόλυτης τιμής και 1/Ν ; Υπολογισμός της απόλυτης τιμής του περιεχομένου του DX CMP DX,0 JGE ADDR1 ; αν είναι θετικός ή μηδέν, τερμάτισε NEG DX ; αλλιώς αντιστροφή ADDR1: HLT ; Υπολογισμός της ποσότητας 1/Ν με προσέγγιση 2 δεκαδικών κλασματικών ψηφίων: 1/N=0.XYZW => 100/Ν=XY.ZW όπου X, Y δεκαδικοί αριθμοί. Συνεπώς από το ακέραιο μέρος του [100/Ν]=XY MOV AX, 100 ; Θεωρείται ότι ο αριθμός Ν είναι στον καταχωρητή BL DIV BL ; Εδώ προκύπτει ο αριθμός ΧΥ (σε δυαδική μορφή) στον καταχωρητή AL MOV AH, 0 MOV BL, 10 ; Μετατροπή σε δεκαδική μορφή. DIV BL ; Πηλίκο στον καταχωρητή AL (=Χ) και υπόλοιπο στον AH (=Υ) HLT ; 1ο δεκαδικό ψηφίο (Χ) στον καταχωρητή AL και το 2ο (Υ) στον AH

Παράδειγμα 3ο : Υπολογισμός της ποσότητας Ν! ADDR1: MOV CL, NCON MOV AL,1 ; αρχικές τιμές MOV DX,1 MUL DL ; AX ALxDL INC DL CMP DL, CL ; Επανέλαβε μέχρι και JLE ADDR1 ; DL = N, AX = N! HLT Ή εναλλακτικά MOV CL, NCON MOV AL,1 ; αρχικές τιμές ADDR1: MUL CL ; AX ALxCL LOOP ADDR1 ; Επανέλαβε μέχρι CL=0 HLT

Παράδειγμα 4ο : Πλήθος εμφάνισης byte 3EH ; Πόσες φορές εμφανίζεται το byte 3EH; MOV DX,0 MOV AL,3EH CLD MOV DI,300H ; Αρχικοποιήσεις MOV CX,101 ; Ο μετρητής τίθεται κατά μια τιμή μεγαλύτερος ADDR1: REPNE SCASB ; Όσο ο AL δεν είναι ίσος με 3EH συνεχίζεται INC DX ; η σύγκριση, αν βρει ένα ενημερώνει το μετρητή CMP CX,0 JNE ADDR1 DEC DX ; Εξουδετερώνεται η ανεπιθύμητη αύξηση του DX HLT

Παράδειγμα 5ο : Πλήθος θέσεων που διαφέρουν δυο περιοχές μήκους 100 bytes ; Σε πόσα byte διαφέρουν δύο περιοχές μήκους 100 bytes MOV DX, 0 ; Αρχικοποιήσεις CLD MOV DI, 200Η MOV SI, 300H MOV CX, 101 ADDR1: REPE CMPSB ; Όσο δεν βρίσκει ίσα byte συνεχίζει INC DX ; Αν βρει ένα ζευγάρι ενημερώνει το μετρητή CMP CX, 0 JNZ ADDR1 DEC DX ; Εξουδετερώνεται η ανεπιθύμητη αύξηση του DX HLT

ΠΑΡΑΔΕΙΓΜΑ ΧΡΗΣΗΣ ΤΩΝ ΕΝΤΟΛΩΝ ΤΟΥ 8086 Να μετρηθεί ο αριθμός των κιβωτίων που διερχόμενα διακόπτουν φωτεινή δέσμη που ενεργοποιεί φωτοκύτταρο. Η έξοδος του φωτοκυττάρου οδηγείται στο bit 7 της πόρτας D6H. Το δεκαδικό αποτέλεσμα πρέπει να απεικονιστεί σε δύο 7- segments που είναι συνδεδεμένα στην πόρτα D4H (με αποκωδικοποιητή BCD 7-segment). μυ 8086 IN7 OUTPUT Port D4H INPUT Port D6H Είσοδος κιβωτίου Έξοδος κιβωτίου Έξοδος Φωτοκυττάρου

ΔΙΑΓΡΑΜΜΑ ΡΟΗΣ ΤΟΥ ΠΡΟΓΡΑΜΜΑΤΟΣ «ΜΕΤΡΗΤΗΣ ΚΙΒΩΤΙΩΝ» ΑΡΧΗ ΑΡΧΙΚΟΠΟΙΗΣΗ COUNTER = 0 ΕΞΟΔΟΣ OUTPUT COUNTER ΕΙΣΟΔΟΣ ΟΧΙ IN7 = 0? ΝΑΙ ΟΧΙ IN7 = 1 ΝΑΙ ΠΡΟΣΘΕΣΕ 1 ΕΠΕΞΕΡΓΑΣΙΑ ΔΙΟΡΘΩΣΕ ΓΙΑ ΔΕΚΑΔΙΚΗ ΜΕΤΡΗΣΗ- ΑΠΕΙΚΟΝΙΣΗ

Ο ΚΩΔΙΚΑΣ ΤΟΥ ΠΡΟΓΡΑΜΜΑΤΟΣ «ΜΕΤΡΗΤΗΣ ΚΙΒΩΤΙΩΝ» PROG SEGMENT ASSUME CS: PROG 0000 B0 0 COUNTER: MOV AL, 0 ; Μετρητής = 0 0002 8A D8 CYCLE: MOV BL, AL ; BL Μετρητής 0004 E6 D4 OUT 0D4H, AL ; Εμφάνιση Μετρητή 0006 E4 D6 READ1: IN AL, 0D6H ; Ανάγνωση 0008 A8 80 TEST AL, 80H ; Έλεγχος bit 7 000A 75 FA JNZ READ1 ; Αναμονή μέχρι LOW 000C E4 D6 READ2: IN AL, 0D6H ; Ανάγνωση 000E A8 80 TEST AL, 80H ; Έλεγχος bit 7 0010 74 FA JZ READ2 ; Αναμονή μέχρι HIGH 0012 BA C3 MOV AL, BL ; AL Μετρητής 0014 FE C0 INC AL ; AL AL + 1 0016 27 DAA ; Δεκαδικός 0017 EB E9 JMP CYCLE ; Επανάληψη 0019 PROG ENDS FA = -6 (0006-000CH = -6), E9 = -23 (0002-00019 H = -17 H = -23 )

Μικροεπεξεργαστές 80x86 και Pentium Επεξεργαστές Intel -ημερομηνία παραγωγής MIPs Συχνότητα - Aριθμός Τρανζίστορ Μήκος Bit Καταχωρητών Διάδρομος Δεδομένων - Διευθύνσεων Caches in CPU Package Intel 8086-1978 0.8 8 MHz - 29 K GP: 16 16 1 MB - Intel 286-1982 2.7 12.5 MHz - 134 K GP: 16 16 16 MB - Intel 386DX- 1985 6.0 20 MHz - 275 K GP: 32 32 4 GB - Intel486DX- 1989 20 25 MHz - 1.2 M GP: 32 FPU: 80 32 4 GB L1: 8KB Pentium - 1993 100 60 MHz - 3.1 M GP: 32 FPU: 80 64 4 GB L1: 16KB PentiumPro - 1995 440 200 MHz - 5.5 M GP: 32 FPU: 80 64 64 GB L1: 16KB L2: 256-512KB Pentium II, III, 4 1997-1999-2000-266MHz 1.5GHz 7M 40M GP: 32 FPU: 80 MMX: 64 64 64 GB L1: 32KB L2: 512KB Intel Xeon MP 2002-1.65GHz - 108M GP: 32 FPU: 80 MMX: 64 XMM: 128 64 GB L1: 32KB L2: 1 MB Pentium 4-3 GHz - 55M GP: 32 FPU: 80 MMX: 64 XMM: 128 64 64 GB L1: 64KB L2: 1 MB

Γενιές Μικροεπεξεργαστών 80x86 1 η Γενιά: Σε αυτήν μπορούμε να κατατάξουμε τους αρχικούς, με Διάδρομο Δεδομένων 8 bit, με της Intel 8008, 8080, 8085. Αυτοί παρέχουν Διάδρομο Διευθύνσεων 16 bit και χώρο πρόσβασης στη μνήμη 64Kbyte. 2 η Γενιά: Εδώ έχουμε τον 1 ο 16 bit με της Intel που αποτέλεσε επέκταση των προηγούμενων 8 bit με με μια σχετική συμβατότητα στο λογισμικό. Διαθέτει 16 bit Διάδρομο Δεδομένων και 20 bit Διάδρομο Διευθύνσεων με χώρο πρόσβασης στη μνήμη 1 Μbyte. Αποτέλεσε τη βάση των επεξεργαστών για τους προσωπικούς υπολογιστές. Ο με 8086 (για την ακρίβεια μια μικρότερη έκδοσή του, ο με 8088) δημιουργήθηκε αποκλειστικά για τον IBM PC (και στη συνέχεια χρησιμοποιήθηκε στον IBM XT). Όλοι οι επόμενοι επεξεργαστές 80x86, έχουν συμβατότητα στο επίπεδο της γλώσσας μηχανής, περιλαμβάνοντας σε κάθε επόμενη γενιά πρόσθετες εντολές. Ο λόγος ήταν για να μπορούν να «τρέχουν» την τεράστια ποσότητα λογισμικού, εμπορικών και επιστημονικών εφαρμογών που είχε δημιουργηθεί. Ακόμα και στους σημερινούς επεξεργαστές αρκετές από τις εφαρμογές αυτές συνεχίζουν να λειτουργούν. Μια βελτιωμένη αρχιτεκτονική έκδοση, ο με 80286 παρουσιάστηκε το 1982 και χρησιμοποιήθηκε στην επόμενη μορφή των προσωπικών υπολογιστών στον IBM AT.

Γενιές Μικροεπεξεργαστών 80x86 3 η Γενιά: Το 1985 η Intel εισήγαγε τον 1 ο 32-bit μικροεπεξεργαστή της, τον 80386DX. Η συσκευή αυτή ήταν συμβατή με τους 8086/8088/80286 με εξαιρετικές επιδόσεις και δυνατότητα χειρισμού δεδομένων στα 32, 16, 8-bit. Διαθέτει 32 bit Διάδρομο Δεδομένων και Διευθύνσεων με χώρο πρόσβασης μνήμης 4 Gbyte. 4 η Γενιά: Το 1989 η Intel εισήγαγε τον 80486DX που είναι βασικά μια βελτιωμένη αρχιτεκτονική του 80386DX και περιλαμβάνει μια κρυφή (cache) μνήμη και ένα μαθηματικό συνεπεξεργαστή ενσωματωμένο στο ίδιο chip. Επιπλέον είναι βελτιωμένος από πλευράς ταχύτητας κατά 50% σε σχέση με τον 80386DX. 5 η Γενιά: Ο Pentium είναι ένας υπερβαθμωτός επεξεργαστής με 64 bit Διάδρομο Δεδομένων και 32 bit Διάδρομο Διευθύνσεων. Η επίδοσή του είναι σχεδόν διπλάσια από τον ισοδύναμο 80486. Οι πράξεις κινητής υποδιαστολής εκτελούνται περίπου 3 φορές ταχύτερα και είναι απολύτως συμβατός στο λογισμικό με τις προηγούμενες εκδόσεις με 80x86. 6 η Γενιά: Οι Pentium II/III και ο Pentium Pro είναι αναβαθμίσεις του Pentium και διαθέτουν διάδρομο που επιτρέπει την σύνδεση μέχρι τεσσάρων επεξεργαστών χωρίς πρόσθετη λογική. Επιπλέον ανιχνεύει και διορθώνει όλα τα σφάλματα 1-bit και ανιχνεύει όλα τα σφάλματα πολλών-bit του διαδρόμου.

Η εσωτερική αρχιτεκτονική του μe Pentium Front End Control DP Logic Branch Target Buffer Prefetch Address TLB Code Cache 8Kbytes L1 Instruction Cache 64-bit data bus 32-bit address bus Control Data Control Bus Unit APIC 64-bit data bus Page Unit 32-bit address bus Instruction Pointer Prefetch Buffers Instruction Decode Instruction Decode Address Generate (U-pipe) Address Generate (V-pipe) Integer Register File ALU (U pipe) Barrel Shifter 256 ALU (V pipe) Control ROM Floating Point Unit Control Register File Add FPU Instruction Fetch Decode Floating- Point Unit Execution Core Control Unit V Pipe Integer Unit U Pipe BU Branch Unit 32 32 32 Data Cache 8Kbytes TLB 32 32 32 80 Divide Multiply 80 Write

Η σωλήνωση του Pentium Η βασική σωλήνωση ακέραιων αριθμών του Pentium αποτελείται από πέντε χρονικά στάδια, που χωρίζονται ως εξής: 1. Προανάκληση/Ανάκληση (Prefetch/Fetch): Οι εντολές προσκομίζονται από την κρυφή μνήμη εντολών και κατευθύνονται στους απομονωτές προανάκλησης για την αποκωδικοποίηση. 2. Αποκωδικοποίηση 1 (Decode1): Οι εντολές αποκωδικοποιούνται στην εσωτερική μορφή εντολής του Pentium. Η πρόβλεψη διακλάδωσης πραγματοποιείται επίσης σε αυτή τη φάση. 3. Αποκωδικοποίηση 2 (Decode2): Όπως ανωτέρω, ο μικροκώδικας ROM ανακαλείται εδώ, εάν είναι απαραίτητο. Επίσης, οι υπολογισμοί διευθύνσεων πραγματοποιούνται σε αυτή τη φάση. 4. Εκτέλεση: Το υλικό ακέραιων αριθμών εκτελεί την εντολή. 5. Εγγραφή-Πίσω: Τα αποτελέσματα του υπολογισμού γράφονται πίσω στο αρχείο καταχωρητών.

Αρχιτεκτονική του με Pentium Pro Execution Core Front End L1 Instruction Cache Instruction Fetch Translate x86/ Decode Re-order Buffer (ROB) BU Branch Unit 1. Αποσύζευξη του εμπρός μέρους από το πίσω τμήμα 2. Ο σταθμός κράτησης (RS - reservation station) 3. Απομονωτή επαναδιάταξης (ROB - reorder buffer) 4. Το παράθυρο εντολών 5. Μετονομασία καταχωρητών Reservation Station (RS) Port 1 Port 0 Port 0 Port 2 Port 3 Port 4 Store Data Store Address Memory Unit Load Address FPU Floating- Point Unit V Pipe U Pipe Integer Unit Re-order Buffer (ROB) Write Completion Unit

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

Ο σταθμός κράτησης Η λύση στο ανωτέρω πρόβλημα είναι να τοποθετηθούν οι πρόσφατα αποκωδικοποιημένες εντολές σε έναν απομονωτή, και να διανεμηθούν έπειτα στον πυρήνα εκτέλεσης όποτε είναι έτοιμες να εκτελεσθούν, ακόμα κι αν αυτό σημαίνει ότι εκτελούνται όχι παράλληλα αλλά σε αντίστροφη σειρά. Αυτός ο τρόπος, το τρέχον πλαίσιο στο οποίο μια ιδιαίτερη εντολή βρίσκεται, μπορεί να ασκήσει πολύ μεγαλύτερη επίδρασης στο χρόνο και στον τρόπο με τον οποίο εκτελείται. Με την αντικατάσταση της μονάδας ελέγχου από έναν απομονωτή, ο πυρήνας του P6 αντικαθιστά τους σταθερούς κανόνες με την ευελιξία. Υπάρχουν διάφοροι παράγοντες που μπορεί να αποτρέψουν μια εντολή από την εκτέλεση της εκτός-σειράς με αυτόν τον τρόπο; η εντολή μπορεί να εξαρτάται, για την εισαγωγή της, από τα αποτελέσματα μιας άλλης εντολής που δεν έχει εκτελεστεί ακόμα, ή μπορεί να περιμένει δεδομένα που φορτώνονται από τη μνήμη, ή μια μονάδα εκτέλεσης που είναι απασχολημένη να διατεθεί, ή οποιοδήποτε άλλη συνθήκη που πρέπει να ικανοποιηθεί προτού η αποκωδικοποιημένη εντολή να είναι έτοιμη να αποσταλεί στην κατάλληλη μονάδα εκτέλεσης. Η P6 αρχιτεκτονική τροφοδοτεί κάθε αποκωδικοποιημένη εντολή μέσα σε έναν απομονωτή αποκαλούμενο σταθμό κράτησης (RS - reservation station), όπου περιμένει έως ότου πληρωθούν οι όλες της απαιτήσεις εκτέλεσης. Μόλις είναι έτοιμη, η εντολή κινείται από το σταθμό κράτησης στην κατάλληλη μονάδα εκτέλεσης. Μια ματιά στο P6 διάγραμμα πυρήνων θα δείξει ότι μέχρι τρεις εντολές ανά κύκλο μπορούν να μετακινηθούν από τους αποκωδικοποιητές στο σταθμό κράτησης. Και όπως θα δούμε κατωτέρω, μέχρι πέντε εντολές ανά κύκλο μπορούν να μετακινηθούν από το σταθμό κράτησης στις μονάδες εκτέλεσης. Κατά συνέπεια ο αρχικό υπερβαθμωτός σχεδιασμός του Pentium, στο οποίο δύο εντολές ανά κύκλο θα μπορούσαν να μετακινηθούν από τους αποκωδικοποιητές στον πυρήνα εκτέλεσης, έχει αντικατασταθεί με ένα απομονωτή στο οποίο μπορούν να εισέρχονται τρεις εντολές και να εξέρχονται από αυτόν τέσσερις εντολές σε κάθε κύκλο. Αυτή η λειτουργία της απομόνωσης, που επιτρέπει την αποσύζευξη του μπροστινού μέρους (που αποκωδικοποιεί) και του πίσω τμήματος (που τις εκτελεί), είναι η καρδιά των κερδών στην επίδοση των επεξεργαστών P6.

Απομονωτής επαναδιάταξης Στο διάγραμμα του P6 (Σχ. 7.23) μπορούμε να παρατηρήσουμε ότι αφότου αποκωδικοποιούνται οι εντολές, πρέπει να ταξιδέψουν μέσω του απομονωτή επαναδιάταξης (ROB - reorder buffer) πριν φτάσουν στο σταθμό κράτησης. Ο ROB είναι όπως ένα μεγάλο ημερολόγιο στο οποίο ο P6 μπορεί να καταγράψει όλες τις ουσιαστικές πληροφορίες για κάθε εντολή που εισάγει στον πυρήνα εκτέλεσης. Η αρχική λειτουργία ROB είναι να εξασφαλίσει ότι οι εντολές βγαίνουν στο τέλος του πυρήνα εκτός-σειράς εκτέλεσης στην ίδια σειρά που μπήκαν. Η εργασία του σταθμού κράτησης είναι να εκτελούνται οι εντολές στη βέλτιστη σειρά, ακόμα κι αν αυτή σημαίνει ανάποδη εκτέλεση από τη σειρά του προγράμματος, και η εργασία του απομονωτή επαναδιάταξης είναι να εξασφαλίσει ότι οι τελειωμένες εντολές παίρνουν ξαναμπαίνουν στη αρχική σειρά του προγράμματος και ότι τα αποτελέσματά τους γράφονται στις σωστές θέσεις στο αρχιτεκτονικό αρχείο καταχωρητών. Για αυτόν τον λόγο, ο ROB αποθηκεύει τα δεδομένα για τη θέση κάθε εντολής, τα ορίσματα, τις ανάγκες σε καταχωρητές, την αρχική θέση στο πρόγραμμα, κ.λπ.

Το παράθυρο εντολών Για να διευκολύνουμε την κατανόηση της λειτουργίας του συνδυασμού RS + ROB στο P6, ή ανάλογων δομών και σε άλλους επεξεργαστές, εισάγουμε την έννοια του παραθύρου εντολής. Ο ROB στο P6 μπορεί να ακολουθήσει μέχρι 40 εντολές στα διάφορα στάδια της εκτέλεσης, και ο σταθμός κράτησης του μπορεί να φυλάει και να εξετάζει μέχρι 20 εντολές για να καθορίσει το βέλτιστο χρόνο για να εκτελεστούν. Ο απομονωτή 20-εντολών του σταθμού κράτησης μπορεί να θεωρηθεί ως ένα παράθυρο που κινείται κατά μήκος της ακολουθιακά διαταγμένης ροής κώδικα. Σε οποιοδήποτε δεδομένο κύκλο, ο P6 εξετάζει μέσω αυτού του παραθύρου το ορατό τμήμα του κώδικα και το μοιράζει στο υλικό έτσι ώστε αυτό να εκτελέσει τις 20 εντολές βέλτιστα. Το P6's ευρύτερο παράθυρο εντολής επιτρέπει στον επεξεργαστή για να κοιτάζει πιο μπροστά στη ροή κώδικα και να τοποθετεί σε κάθε παλμό ρολογιού βέλτιστα τουλάχιστον τρεις εντολές με τρόπο που να κάνει την καλύτερη χρήση των διαθέσιμων πόρων.

Μετονομασία καταχωρητών Μια λειτουργία του ROB στους επεξεργαστές P6 είναι η μετονομασία καταχωρητών. Η μετονομασία καταχωρητών κάνει για τη ροή δεδομένων ότι το παράθυρο εντολής κάνει για τη ροή κώδικα. Επιτρέπει στον επεξεργαστή κάποια ευελιξία στην προσαρμογή των πόρων του να ανταποκριθεί στις ανάγκες του τρέχοντος προγράμματος (που εκτελείται εκείνη τη στιγμή). Το σύνολο εντολών x86 αξιοποιεί μόνο οκτώ γενικής χρήσης καταχωρητές (GPRs) και οκτώ καταχωρητές κινητής υποδιαστολής (FPRs), έναν ασήμαντο αριθμό σε σχέση με τα σημερινά δεδομένα (π.χ. το PowerPC διαθέτει 32 καταχωρητές). Η μετονομασία καταχωρητών επιτρέπει σε έναν επεξεργαστή να έχει έναν μεγαλύτερο αριθμό πραγματικών καταχωρητών από αυτόν που είναι ορατοί μέσα από την Assembly. Με αυτόν τον τρόπο επιτρέπει να γίνονται περισσότεροι υπολογισμοί ταυτόχρονα χωρίς να προκαλείται έλλειψη καταχωρητών. Ενώ φαίνεται στο πρόγραμμα ότι χρησιμοποιεί μόνο οκτώ καταχωρητές, στην πραγματικότητα χρησιμοποιεί μέχρι 40, που είναι εντελώς αντίστοιχο με τη θεώρηση ότι το πρόγραμμα τρέχει ακολουθιακά ενώ οι εντολές εκτελούνται εκτός-σειράς. Κάθε μια από τις 40 καταχωρήσεις του ROB έχει έναν πεδίο δεδομένων, που φυλάσσει τα δεδομένα προγράμματος ακριβώς όπως ένας καταχωρητής x86. Αυτά τα πεδία δίνουν στο πυρήνα εκτέλεσης του P6 40 μικρο-αρχιτεκτονικούς καταχωρητές για αξιοποίηση και χρησιμοποιούνται σε συνδυασμό με το πίνακα κατανομής καταχωρητών (RAT- register allocation table) για να υλοποιήσουν την μετονομασία καταχωρητών στο πυρήνα του P6.

Χρηματοδότηση Το παρόν εκπαιδευτικό υλικό έχει αναπτυχθεί στα πλαίσια του εκπαιδευτικού έργου του διδάσκοντα. Το έργο «Ανοικτά Ακαδημαϊκά Μαθήματα» του ΕΜΠ έχει χρηματοδοτήσει μόνο την αναδιαμόρφωση του υλικού. Το έργο υλοποιείται στο πλαίσιο του Επιχειρησιακού Προγράμματος «Εκπαίδευση και Δια Βίου Μάθηση» και συγχρηματοδοτείται από την Ευρωπαϊκή Ένωση (Ευρωπαϊκό Κοινωνικό Ταμείο) και από εθνικούς πόρους.