[Contents][Next][Art of Assembly][Randall Hyde]


Art of Assembly Language: Κεφαλαιο 3


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

 3.0  Περίληψη
 3.1  Τα βασικά συστατικά του συστήματος
 3.1.1  Ο Δίαυλος του συστήματος (System Bus)
 3.1.1.1  Δίαυλος δεδομένων (Data Bus)
 3.1.1.2  Δίαυλος Διευθύνσεων (Address Bus)
 3.1.1.3  Δίαυλος Ελέγχου   (Control Bus)
 3.1.2.  Το υποσύστημα της μνήμης
 3.1.3.  Το υποσύστημα Εισοδου / Εξοδου (Ι/Ο)

 3.2. Χρονισμός Συστήματος

 3.2.1. Ρολόι Συστήματος
 3.2.2. Πρόσβαση Μνήμης και Ρολόι Συστήματος
 3.2.3. Wait state - Κατάσταση Αναμονής
 3.2.4. Κρυφή Μνήμη – (Cache Memory)
 3.3 Οι 886, 8286, 8486, 8686 "υποθετικοί" επεξεργαστές
 3.3.1 Οι καταχωρητές της Κεντρικής Μονάδας Επεξεργασίας (CPU)
 3.3.2 Αριθμητική και λογική μονάδα (Arithmetic & Logical Unit, ALU)
3.3.3 Η Μονάδα Διεπαφής Διάυλου (BIU)
 3.3.4 Η μονάδα ελέγχου και το σετ εντολών
 3.3.5 To x86 σετ εντολών
3.3.6 Τύποι διευθυνσιοδότησης στον επεξεργαστή x86
3.3.7 Κωδικοποιώντας x86 εντολές
3.3.8 Βηματική εκτέλεση εντολών
3.3.9 Οι διαφορές μεταξύ των x86 επεξεργαστών
3.3.10 Ο 886 επεξεργαστής
 3.3.11. Ο 8486 Επεξεργαστής
 3.3.11.1. Σωλήνωση 8486
 3.3.11.2. Μποτιλιάρισμα σωλήνωσης (σωλήνωση)
 3.3.11.3. Cache, Ουρά Προ-ανάκλησης και ο 8486
 3.3.11.4. Κίνδυνοι στους 8486
 3.3.12. Ο 8686 Επεξεργαστής
 3.4. I/O   Είσοδος/Έξοδος
 3.5. Διακοπές και Ε/Ε με σφυγμομέτρηση
 
 
 

Copyright 1996 by Randall Hyde

All rights reserved.

Duplication other than for immediate display through a browser is prohibited by U.S. Copyright Law.

This material is provided on-line as a beta-test of this text. It is for the personal use of the reader only. If you are interested in using this material as part of a course, please contact

rhyde@cs.ucr.edu

Supporting software and other materials are available via anonymous ftp from ftp.cs.ucr.edu. See the "/pub/pc/ibmpcdir" directory for details. You may also download the material from "Randall Hyde's Assembly Language Page" at URL:

http://webster.ucr.edu

Notes:

This document does not contain the laboratory exercises, programming assignments, exercises, or chapter summary. These portions were omitted for several reasons: either they wouldn't format properly, they contained hyperlinks that were too much work to resolve, they were under constant revision, or they were not included for security reasons. Such omission should have very little impact on the reader interested in learning this material or evaluating this document.

This document was prepared using Harlequin's Web Maker 2.2 and Quadralay's Webworks Publisher. Since HTML does not support the rich formatting options available in Framemaker, this document is only an approximation of the actual chapter from the textbook.

If you are absolutely dying to get your hands on a version other than HTML, you might consider having the UCR Printing a Reprographics Department run you off a copy on their Xerox machines. For details, please read the following EMAIL message I received from the Printing and Reprographics Department:

Hello Again Professor Hyde,

Dallas gave me permission to take orders for the Computer Science 13 Manuals. We would need to take charge card orders. The only cards we take are: Master Card, Visa, and Discover. They would need to send the name, numbers, expiration date, type of card, and authorization to charge $95.00 for the manual and shipping, also we should have their phone number in case the company has any trouble delivery. They can use my e-mail address for the orders and I will process them as soon as possible. I would assume that two weeks would be sufficient for printing, packages and delivery time.

I am open to suggestions if you can think of any to make this as easy as possible.

Thank You for your business,

Kathy Chapman, Assistant
Printing and Reprographics
University of California
Riverside
(909) 787-4443/4444

We are currently working on ways to publish this text in a form other than HTML (e.g., Postscript, PDF, Frameviewer, hard copy, etc.). This, however, is a low-priority project. Please do not contact Randall Hyde concerning this effort. When something happens, an announcement will appear on "Randall Hyde's Assembly Language Page." Please visit this WEB site at http://webster.ucr.edu for the latest scoop.


 
 
 

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

 

Για να γραφτεί ένα αξιοπρεπές πρόγραμμα σε γλώσσα μηχανής σε επεξεργαστή 80x86 απαιτείται εξοικείωση με την οικογένεια των επεξεργαστών 80x86. Απαιτείται καλή γνώση και κατανόηση του βασικού hardware. Δυστυχώς όμως το θεμελιώδες hardware δεν είναι συνεπές. Οι τεχνικές που είναι κρίσιμες για 8088 συστήματα μπορεί μα μην είναι χρήσιμες σε συστήματα 80486. Παρομοίως, προγραμματιστικές τεχνικές που παρέχουν μεγάλη απόδοση σε ένα chip 80486 μπορεί να μη βοηθούν καθόλου σε ένα chip 80286. Ευτυχώς κάποιες προγραμματιστικές τεχνικές δουλεύουν σε οποιοδήποτε μικροεπεξεργαστή χρησιμοποιούνται. Αυτό το κεφάλαιο αναφέρεται στην επίδραση που έχει το hardware στην απόδοση του λογισμικού.

 

 

3.0 Περίληψη

Αυτό το κεφάλαιο περιγράφει τα βασικά συστατικά ενός υπολογιστικού συστήματος : η Κεντρική Μονάδα Επεξεργασίας, η μνήμη, οι Είσοδοι/Έξοδοι και ο δίαυλος που τα συνδέει. Αν και μπορεί να γραφτεί λογισμικό αγνοώντας αυτές τις έννοιες, το λογισμικό υψηλής απόδοσης προϋποθέτει πλήρη κατανόηση αυτών των θεμάτων.

3.1 Τα βασικά συστατικά του συστήματος

Το βασικό λειτουργικό σχέδιο ενός υπολογιστικού συστήματος καλείται αρχιτεκτονική του Η/Υ. Για παράδειγμα η οικογένεια των επεξεργαστών 8086 χρησιμοποιεί την αρχιτεκτονική του Von Neumann (VNA). Ένα τυπικό σύστημα Von Neumann έχει 3 βασικά συστατικά: Κεντρική Μονάδα Επεξεργασίας, Μνήμη και I/O. Ο τρόπος με τον οποίο ο σχεδιαστής του συστήματος συνδυάζει τα συστατικά, επηρεάζει την απόδοση του συστήματος.
 

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

 
 

3.1.1  Ο Δίαυλος του συστήματος (System Bus)

Ο Δίαυλος συστημάτων συνδέει τα διάφορα συστατικά μιας VNA μηχανής. Η οικογένεια 80x86 έχει τρείς βασικούς Διαύλους : τον δίαυλο των διευθύνσεων, τον δίαυλο των δεδομένων και τον δίαυλο ελέγχου. Ο δίαυλος είναι μια συλλογή από καλώδια μέσω των οποίων μεταδίδονται ηλεκτρικά σήματα μεταξύ των μερών του συστήματος. Αυτοί οι Δίαυλοι (Busses) διαφέρουν από επεξεργαστή σε επεξεργαστή. Παρακάτω θα αναφερθούμε αναλυτικότερα στα τρία είδη των Διαύλων.
 

3.1.1.1 Δίαυλος δεδομένων (Data Bus)

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

Σε τυπικά συστήματα 80x86 ο δίαυλος δεδομένων περιέχει 8,  16, 32 ή 64 γραμμές. Οι 8088 και 80188 μικροεπεξεργαστές έχουν έναν 8bit δίαυλο δεδομένων. Οι 8086, 80186, 80286, 80386SX επεξεργαστές έχουν έναν 16bit δίαυλο δεδομένων. Οι 80386DX, 80486 και οι Pentium Overdrive επεξεργαστές έχουν 32bit δίαυλο δεδομένων. Ο Pentium  και Pentium Pro επεξεργαστής έχει 64 bit δίαυλο δεδομένων.

Ένας δίαυλος 8bit δεν περιορίζει τον επεξεργαστή σε τύπους δεδομένων 8 bits. Απλά σημαίνει ότι ο επεξεργαστής μπορεί να προσπελάσει μόνο 1 byte δεδομένα σε κάθε κύκλο μνήμης. Έτσι ένας επεξεργαστής με 32bit δίαυλο δεδομένων είναι γρηγορότερος από έναν επεξεργαστή με 16 ή 8 bit. Το μέγεθος της δίαυλου δεδομένων επηρεάζει την απόδοση του συστήματος περισσότερο από κάθε άλλο δίαυλο.

Συχνά  θα έχετε ακούσει για επεξεργαστές 8, 16, 32 ή 64 bit. Αν και υπάρχει μια μεγάλη αμφισβήτηση όσον αφορά το μέγεθος ενός επεξεργαστή, οι περισσότεροι συμφωνούν πλέον ότι ο αριθμός των γραμμών δεδομένων στον επεξεργαστή καθορίζει το μέγεθος του. Από τη στιγμή επομένως που οι 80x86 δίαυλοι είναι 8, 16, 32 ή 64 bit, οι περισσότερες προσβάσεις στα δεδομένα είναι επίσης 8, 16, 32 ή 64bits. Παρόλο που είναι δυνατό να επεξεργαστούμε 12 bit δεδομένα με έναν 8088, οι περισσότεροι προγραμματιστές επεξεργάζονται  16 bits, από τη στιγμή που ο επεξεργαστής θα φορτώσει και θα χειριστεί 16 bits ούτως ή άλλως. Αυτό συμβαίνει επειδή ο επεξεργαστής (8088) πάντα φορτώνει 8 bits ανα κύκλο μνήμης. Για να φορτωθούν 12bits απαιτούνται δύο 8bit διευθύνσεις της μνήμης (2 κύκλοι μνήμης). Επομένως οι περισσότεροι προγραμματιστές χρησιμοποιούν και τα 16bits, κάτι που είναι πολύ πιο αποδοτικό.

Οι 80x86 επεξεργαστές μεγέθους 16, 32 ή 64 bits μπορούν να προσπελάσουν και μικρότερες μονάδες μνήμης των 8, 16 ή 32bits. Επομένως ένας μεγάλος δίαυλος δεδομένων είναι πιο αποδοτικός, μπορεί να προσπελάσει τη μνήμη γρηγορότερα και μπορεί να προσπελάσει μεγαλύτερα μπλοκ δεδομένων με μία διεύθυνση μνήμης
 

 

Processor

Data Bus Size

8088 8
80188 8
8086 16
80186 16
80286 16
80386sx 16
80386dx 32
80486 32
80586 class/ Pentium (Pro) 64
3.1.1.2 Δίαυλος Διευθύνσεων (Address Bus)

Όπως αναφέραμε ο δίαυλος διευθύνσεων σε έναν 80x86 επεξεργαστή μεταφέρει πληροφορίες μεταξύ μιας συγκεκριμένης θέσης της Μνήμης ή συσκευής Εισόδου/Εξόδου και της CPU. Η μόνη ερώτηση που προκύπτει είναι " Ποια θέση της μνήμης ή ποια συσκευή ;" . Ο δίαυλος διευθύνσεων δίνει την απάντηση. Για να διακρίνει τις διαφορετικές διευθύνσεις μνήμης και τις συσκευές Εισόδου/Εξόδου (I/O) ο σχεδιαστής συστήματος, αναθέτει μια μοναδική διεύθυνση μνήμης σε κάθε στοιχείο μνήμης και I/O συσκευών. Όταν το λογισμικό θέλει να προσπελάσει μια συγκεκριμένη θέση μνήμης ή μια συγκεκριμένη συσκευή I/O, τοποθετεί τη ζητούμενη διεύθυνση στον δίαυλο διευθύνσεων. Το κύκλωμα που σχετίζεται με τη μνήμη ή I/O συσκευή να διαβάσει από ή να τοποθετήσει δεδομένα στον δίαυλο δεδομένων. Όλες οι άλλες θέσεις μνήμης αγνοούν την εντολή. Μόνο η συσκευή/θέση μνήμης που η διεύθυνση της, ταιριάζει με την τιμή της ζητούμενης διεύθυνσης ανταποκρίνεται.

Με μια μόνο γραμμή διευθύνσεων στον δίαυλο διευθύνσεων, ο επεξεργαστής μπορεί να δημιουργήσει ακριβώς 2 μοναδικές διευθύνσεις (0 και 1). Με n γραμμές διευθύνσεων, ο επεξεργαστής μπορεί να παρέχει 2n μοναδικές διευθύνσεις. Επομένως ο αριθμός των bits στον δίαυλο διευθύνσεων θα καθορίσει το μέγιστο αριθμό διευθύνσεων μνήμης και I/O συσκευών. Για παράδειγμα οι 8088 και 8086 επεξεργαστές έχουν 20bit δίαυλους διευθύνσεων. Άρα μπορούν να προσπελάσουν 220 (1,048,576) θέσεις μνήμης. Μεγαλύτεροι δίαυλοι διευθύνσεων μπορούν να προσπελάσουν περισσότερη μνήμη. Ο 80586/Pentium (Pro) έχει 32 bit δίαυλο διευθύνσεων και μπορεί να προσπελάσει 232 (4,294,976,296) θέσεις Μνήμης 4GB, ενώ οι 8088, 8086 μπορούν να προσπελάσουν 1MB μνήμη.
 

 

Processor

Address Bus Size

Max Addressable Memory

In English!

8088 20 1,048,576 One Megabyte
8086 20 1,048,576 One Megabyte
80188 20 1,048,576 One Megabyte
80186 20 1,048,576 One Megabyte
80286 24 16,777,216 Sixteen Megabytes
80386sx 24 16,777,216 Sixteen Megabytes
80386dx 32 4,294,976,296 Four Gigabytes
80486 32 4,294,976,296 Four Gigabytes
80586 / Pentium (Pro) 32 4,294,976,296 Four Gigabytes

 

3.1.1.3 Δίαυλος Ελέγχου (Control Bus)

Ο δίαυλος ελέγχου είναι μια  συλλογή σημάτων που ελέγχουν το πώς ο επεξεργαστής επικοινωνεί με το υπόλοιπο σύστημα. Η CPU στέλνει δεδομένα στη Μνήμη και δέχεται δεδομένα από αυτή στο δίαυλο δεδομένων. Έτσι προκύπτει η ερώτηση " Στέλνει ή λαμβάνει δεδομένα;". Στον δίαυλο ελέγχου υπάρχουν δύο γραμμές, read και write, που ορίζουν την κατεύθυνση της ροής δεδομένων. Άλλα σήματα περιλαμβάνουν σήματα χρονομέτρησης (system clocks), γραμμές διακοπής (interrupt lines), γραμμές κατάστασης (status lines) κ.ο.κ.

Οι read και write γραμμές ελέγχου, ελέγχουν την κατεύθυνση της ροής δεδομένων στον δίαυλο δεδομένων. Όταν και οι δύο περιέχουν ένα λογικό 1, η CPU και η μνήμη-I/O δεν επικοινωνούν η μία με την άλλη. Αν η read γραμμή είναι low (λογικό 0) η CPU διαβάζει δεδομένα από τη μνήμη. Αν η write γραμμή είναι low (0) το σύστημα μεταφέρει δεδομένα από τη CPU στη μνήμη.

Οι γραμμές ενεργοποίησης byte, είναι γραμμές ελέγχου που επιτρέπουν 16, 32 και 64bit επεξεργαστές να χειρίζονται μικρότερα μπλοκ δεδομένων. Η οικογένεια των 80x86 αντίθετα με άλλους επεξεργαστές παρέχει 2 ξεχωριστούς χώρους διευθύνσεων : έναν για τη μνήμη και έναν για τις συσκευές I/O. Ο δίαυλος διευθύνσεων I/O είναι σε όλες τις 80x86 CPU είναι 16bits. Αυτό επιτρέπει τον επεξεργαστή να διευθυνσιοδοτήσει 216= 65,536 διαφορετικές I/O τοποθεσίες. Όπως αποδεικνύεται οι περισσότερες συσκευές I/O (πληκτρολόγιο, εκτυπωτής, disk drivers κ.α) απαιτούν περισσότερες από μία I/O θέσεις. Παρ' όλα αυτά 65,536 διαφορετικές τοποθεσίες είναι υπεραρκετές για τις περισσότερες εφαρμογές. Ο αυθεντικός IBM PC επιτρέπει τη χρήση μόνο 1024 απ' αυτές.

Παρόλο που οι 80x86 υποστηρίζουν 2 χώρους διευθύνσεων, δεν έχουν 2 διαύλους διευθύνσεων (για τη μνήμη και για I/O). Το σύστημα μοιράζεται τον δίαυλο διευθύνσεων και για I/O και για διευθύνσεις μνήμης. Πρόσθετες γραμμές ελέγχου αποφασίζουν αν η διέυθυνση θα είναι για τη μνήμη ή για το I/O. Όταν τέτοια σήματα είναι ενεργά, οι I/O συσκευές χρησιμοποιούν τη διεύθυνση στα  λιγότερο σημαντικά bits (L.O) της δίαυλου διευθύνσεων. Όταν είναι ανενεργά, οι I/O συσκευές αγνοούν τα σήματα στον δίαυλο διευθύνσεων.
 
 

3.1.2. Το υποσύστημα της μνήμης

Ένας τυπικός 80x86 επεξεργαστής διευθυνσιοδοτεί το μέγιστο 2^n διαφορετικές θέσεις μνήμης, όπου n είναι ο αριθμός των bits στην δίαυλο διευθύνσεων. Όπως ήδη έχετε δει, οι 80x86 επεξεργαστές έχουν 20,24 και 32 bit διαύλους διευθύνσεων (σύντομα με 48 bits)

Φυσικά, η πρώτη απορία που δημιουργείται είναι «Τι ακριβώς είναι η θέση μνήμης».  Ο 80x86 υποστηρίζει byte προσβάσιμης μνήμης . Γενικά , η βασική μονάδα μνήμης είναι το byte. Έτσι , με 20,24 και 32 γραμμές διεύθυνσης, οι 80x86 επεξεργαστές μπορούν να διευθύνουν 1 Megabyte, 16 Megabytes και 4Gigabytes μνήμης αντίστοιχα.

Φαντάσου την μνήμη ως ένα γραμμικό πίνακα από bytes. Η διεύθυνση του τελευταίου byte είναι (2^n)-1.

Τι συμβαίνει όμως όταν ο επεξεργαστής προσπελαύνει μια λέξη ή μια διπλή λέξη ; Καθώς η μνήμη αποτελείται από ένα πίνακα από bytes, πώς είναι δυνατό να εργαστούμε με τιμές μεγαλύτερες από 8 bits;

Διαφορετικά υπολογιστικά συστήματα δίνουν διαφορετικές λύσεις σ’ αυτό το πρόβλημα. Η οικογένεια του 80x86 αντιμετωπίζει αυτό το πρόβλημα, αποθηκεύοντας το L.O. byte (χαμηλής τάξης byte) μιας λέξης στην καθορισμένη διεύθυνση και το H.O. byte (υψηλής τάξης byte) στην επόμενη θέση. Παρόλα αυτά, μια λέξη καταλαμβάνει δυο συνεχόμενες διευθύνσεις μνήμης (όπως αντιλαμβάνεστε , καθώς μια λέξη αποτελείται από 2 bytes). Παρομοίως, μια διπλή λέξη καταλαμβάνει τέσσερις συνεχόμενες διευθύνσεις μνήμης. Η διεύθυνση της διπλής λέξης είναι η διεύθυνση του L.O. byte. Τα εναπομείναντα τρία bytes ακολουθούν αυτό το L.O.byte, με το H.O. byte εμφανιζόμενο στην διεύθυνση της διπλής λέξης συν 3.
 
 
 

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

Σημειώστε ότι είναι δυνατόν οι τιμές των bytes, των λέξεων και των διπλών λέξεων να επικαλύπτονται μέσα στην μνήμη. Για παράδειγμα, στο παρακάτω σχήμα μπορείς να έχεις μια μεταβλητή λέξης η οποία να ξεκινάει από την διεύθυνση 193, μια μεταβλητή byte από την διεύθυνση 194 και μια τιμή διπλής λέξης η οποία να ξεκινάει από την διεύθυνση 192. Όλες αυτές οι μεταβλητές θα επικαλυφθούν.

Οι 8088 και 80188 μικροεπεξεργαστές έχουν μια 8-bit δίαυλο δεδομένων . Αυτό σημαίνει ότι η CPU μπορεί να μεταφέρει 8 bits δεδομένων κάθε φορά. Από την στιγμή που κάθε διεύθυνση μνήμης ανταποκρίνεται σε 8 bit-byte, αυτό εμφανίζεται ως η πιο πλεονεκτική διευθέτηση.
Βλέπε το σχήμα 3.5 παρακάτω :

 

Ο όρος «byte addressible memory array» σημαίνει ότι η CPU μπορεί να διευθυνσιοδοτήσει την μνήμη σε μπλοκ , τόσο μικρά όσο ένα μοναδικό byte . Επίσης σημαίνει ότι αυτή είναι η μικρότερη μονάδα μνήμης που μπορείς να προσπελάσεις σε μια φορά με έναν επεξεργαστή.

Ο 8088 και ο 80188 μπορούν να διαχειριστούν με επιτυχία τις τιμές μιας λέξης και μιας διπλής λέξης, ακόμη και με τις 8-bit διαύλους δεδομένων που έχουν. Παρόλα αυτά , αυτό προϋποθέτει πολλαπλές λειτουργίες προστασίας μνήμης επειδή, αυτοί οι επεξεργαστές μπορούν να μεταφέρουν μόνο 8 bits δεδομένων κάθε φορά. Για να φορτώσεις μια λέξη απαιτούνται δυο λειτουργίες μνήμης. Για να φορτώσεις μια διπλή λέξη απαιτούνται τέσσερις λειτουργίες μνήμης.
Οι 8086,80186,80286 και 80386sx επεξεργαστές έχουν 16-bit διαύλους δεδομένων. Αυτό επιτρέπει στους επεξεργαστές να προσπελαύνουν διπλάσια μνήμη στον ίδιο χρόνο, από τα αντίστοιχα 8-bit συστήματα. Αυτοί οι επεξεργαστές οργανώνουν την μνήμη σε δυο πλευρές : μια «ζυγή» πλευρά και μια «μονή» :

 

Το σχήμα παρακάτω διευκρινίζει την σύνδεση με την CPU (D0-D7 δηλώνουν το L.O.byte του διαύλου δεδομένων και D8-D15 δηλώνουν το H.O. byte):


 

Τα 16-bit στοιχεία της 80x86 οικογένειας μπορούν  να φορτώσουν μια λέξη από οποιαδήποτε αυθαίρετη διεύθυνση. Όπως έχουμε ήδη αναφέρει, ο επεξεργαστής εξάγει το L.O.byte της τιμής από την καθορισμένη διεύθυνση και το H.O.byte από την επόμενη συνεχή διεύθυνση. Αυτό δημιουργεί ένα λογικό πρόβλημα, αν κοιτάξεις προσεκτικά το παραπάνω διάγραμμα . Τι συμβαίνει όταν προσπελαύνεις μια λέξη σε μονή διεύθυνση ; Υπέθεσε ότι θέλεις να διαβάσεις μια λέξη, από την θέση 125. Εντάξει, το L.O.byte της λέξης έρχεται από την διεύθυνση 125 και το H.O.byte έρχεται από την θέση 126. Ποιο είναι το πρόβλημα ; Υπάρχουν δυο προβλήματα.

Πρώτον, κοίταξε προσεκτικά τα παραπάνω σχήμα. Οι γραμμές του διαύλου δεδομένων 8 ως 15 (το H.O.byte) συνδέει την μονή πλευρά και οι γραμμές 0 ως 7 (το L.O.byte) την ζυγή πλευρά. Προσπελαύνοντας την θέση μνήμης 125 θα μεταφέρει δεδομένα στην CPU στο H.O.byte της διαύλου δεδομένων. Όμως εμείς θέλουμε αυτά τα δεδομένα στο L.O.byte. Ευτυχώς, οι 80x86 CPU αναγνωρίζουν αυτή την κατάσταση και αυτόματα μεταφέρουν τα δεδομένα στο D8-D15, στο L.O.byte.
Το δεύτερο πρόβλημα είναι ακόμη πιο σκοτεινό και κρυφό. Όταν προσπελαύνουμε λέξεις, στην ουσία κάνουμε προσπέλαση σε δυο διαφορετικά bytes που βρίσκονται σε διαφορετικές διευθύνσεις. Άρα τι διεύθυνση εμφανίζεται στην δίαυλο δεδομένων; Η 16-bit 80x86 CPU πάντα διευθετεί ζυγές διευθύνσεις στην δίαυλο. Τα ζυγά bytes εμφανίζονται πάντα στις γραμμές δεδομένων D0-D7 και τα μονά bytes εμφανίζονται πάντα στις γραμμές δεδομένων D8-D15.

Άρα τι συμβαίνει όταν η CPU προσπελαύνει μια λέξη από μονή διεύθυνση; Η CPU δεν μπορεί να τοποθετήσει την διεύθυνση 125 στην δίαυλο δεδομένων και να διαβάσει τα 16-bits από την μνήμη. Δεν υπάρχουν  ζυγές διευθύνσεις που να προκύπτουν από την 16-bit 80x86 CPU. Οι διευθύνσεις είναι πάντα μονές. Έτσι , αν προσπαθήσεις να βάλεις 125 στην δίαυλο δεδομένων, αυτό θα βάλει 124 στην δίαυλο δεδομένων. Διαβάζοντας τα 16bits αυτής της διεύθυνσης, θα πάρει την λέξη από τις διευθύνσεις 124(L.O.byte) και 125 (H.O.byte)-δηλαδή όχι αυτό που περίμενες. Για να προσπελάσεις μια λέξη σε μια ζυγή διεύθυνση απαιτεί δυο λειτουργίες μνήμης. Πρώτα η CPU πρέπει να διαβάσει το byte στην διεύθυνση 125 και μετά χρειάζεται να διαβάσει το byte στην διεύθυνση 126. Τελικά , χρειάζεται να ανταλλάξει τις θέσεις αυτών των bytes  εσωτερικά μέχρι και τα δυο να εισαχθούν στην CPU στο λανθασμένο μισό της διαύλου δεδομένων. Ευτυχώς η 16-bit CPU κρύβει αυτές τις λεπτομέρειες. Τα προγράμματα σου μπορούν να προσπελάσουν λέξεις σε οποιαδήποτε διεύθυνση και η CPU θα προσπελάσει και θα ανταλλάξει τα δεδομένα μέσα στην μνήμη.
 
 
 

3.1.3 Το υποσύστημα Εισόδου/Εξόδου  (I/O)

Υπάρχουν τρείς περιορισμοί στο υποσύστημα I/O στον IBM PC : Πρώτον, η 8086 CPU απαιτεί ειδικές εντολές για να έχει πρόσβαση στις I/O συσκευές. Δεύτερον οι σχεδιαστές του IBM PC χρησιμοποιούν τις "καλύτερες" I/O θέσεις για δικούς τους σκοπούς, πιέζοντας τους έμμεσα εμπλεκόμενους αναβαθμιστές να χρησιμοποιήσουν τις λιγότερο προσβάσιμες θέσεις. Τρίτον οι 8086 επεξεργαστές δε μπορούν να διευθυνσιοδοτήσουν περισσότερες από 216=65,536 I/O διευθύνσεις. Αν αναλογιστείτε ότι μια VGA κάρτα οθόνης απαιτεί πάνω από 128,000 διαφορετικές θέσεις, αντιλαμβάνεστε το πρόβλημα που προκύπτει από το μέγεθος του I/O διαύλου.

 Ευτυχώς οι σχεδιαστές hardware μπορούν να χαρτογραφήσουν τις I/O συσκευές στο χώρο των διευθύνσεων μνήμης, τόσο εύκολα όσο μπορούν στο χώρο διευθύνσεων I/O. Έτσι χρησιμοποιώντας το κατάλληλο κύκλωμα, μπορούν να κάνουν τις I/O συσκευές να μοιάζουν ακριβώς όπως η μνήμη.

Προς το παρόν λοιπόν θα μπορούσαμε να πούμε ότι η πρόσβαση των συσκευών I/O και της μνήμης λειτουργεί με τον ίδιο τρόπο.
 
 
 
 
 
 

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

 3.0  Περίληψη
 3.1  Τα βασικά συστατικά του συστήματος
 3.1.1  Ο Δίαυλος του συστήματος (System Bus)
 3.1.1.1  Δίαυλος δεδομένων (Data Bus)
 3.1.1.2  Δίαυλος Διευθύνσεων (Address Bus)
 3.1.1.3  Δίαυλος Ελέγχου   (Control Bus)
 3.1.2.  Το υποσύστημα της μνήμης
 3.1.3.  Το υποσύστημα Εισοδου / Εξοδου (Ι/Ο)

 3.2. Χρονισμός Συστήματος

 3.2.1. Ρολόι Συστήματος
 3.2.2. Πρόσβαση Μνήμης και Ρολόι Συστήματος
 3.2.3. Wait state - Κατάσταση Αναμονής
 3.2.4. Κρυφή Μνήμη – (Cache Memory)
 3.3 Οι 886, 8286, 8486, 8686 "υποθετικοί" επεξεργαστές
 3.3.1 Οι καταχωρητές της Κεντρικής Μονάδας Επεξεργασίας (CPU)
 3.3.2 Αριθμητική και λογική μονάδα (Arithmetic & Logical Unit, ALU)
3.3.3 Η Μονάδα Διεπαφής Διάυλου (BIU)
 3.3.4 Η μονάδα ελέγχου και το σετ εντολών
 3.3.5 To x86 σετ εντολών
3.3.6 Τύποι διευθυνσιοδότησης στον επεξεργαστή x86
3.3.7 Κωδικοποιώντας x86 εντολές
3.3.8 Βηματική εκτέλεση εντολών
3.3.9 Οι διαφορές μεταξύ των x86 επεξεργαστών
3.3.10 Ο 886 επεξεργαστής
 3.3.11. Ο 8486 Επεξεργαστής
 3.3.11.1. Σωλήνωση 8486
 3.3.11.2. Μποτιλιάρισμα σωλήνωσης (σωλήνωση)
 3.3.11.3. Cache, Ουρά Προ-ανάκλησης και ο 8486
 3.3.11.4. Κίνδυνοι στους 8486
 3.3.12. Ο 8686 Επεξεργαστής
 3.4. I/O   Είσοδος/Έξοδος
 3.5. Διακοπές και Ε/Ε με σφυγμομέτρηση
Art of Assembly: Κεφαλαιο 3 - 26 SEP 1996

[Contents][Next] [Art of Assembly][Randall Hyde]