Κεφάλαιο2 | Ενότητα3 | Ερωτήσεις επισκόπησης | Επόμενο | Προηγούμενο | Λεξικό όρων
Κωδικοποίηση
συνόλου εντολών
Ο τύπος και το μέγεθος των τελεστέων επηρεάζουν το μέγεθος του μεταγλωττισμένου προγράμματος, την κωδικοποίησή των εντολών (σε δυαδική μορφή), την αποκωδικοποίησή τους από την ΚΜΕ αλλά και την εκτέλεση της εντολής από αυτήν.
ΔΡΑΣΤΗΡΙΟΤΗΤΑ 11
Θυμάστε με ποιον τρόπο καθορίζεται η λειτουργία που πρόκειται να εκτελεστεί από μία εντολή; Για περισσότερες λεπτομέρειες καλό θα ήταν να ανατρέξετε στην 1η ενότητα αυτού του κεφαλαίου και συγκεκριμένα στην υποενότητα «Αρχιτεκτονικές συνόλου εντολών».
Για την κωδικοποίηση των εντολών, έχει μεγάλη σημασία ο τρόπος που θα κωδικοποιήσουμε τους τρόπους διευθυνσιοδότησης στις εντολές και εξαρτάται από τους τρόπους διευθυνσιοδότησης και το βαθμό ανεξαρτησίας μεταξύ των κωδικών λειτουργίας και των τρόπων αυτών. Για παράδειγμα ορισμένοι υπολογιστές διαθέτουν αρκετούς τελεστέους με πολλούς τρόπους διευθυνσιοδότησης για κάθε τελεστέο. Για ένα μεγάλο αριθμό συνδυασμών, τυπικά, χρειάζεται ένας χωριστός προσδιοριστής διεύθυνσης για κάθε τελεστέο : Ο προσδιοριστής τελεστέου καθορίζει ποιός τρόπος διευθυνσιοδότησης χρησιμοποιείται για την προσπέλαση του τελεστέου. Στο άλλο άκρο είναι οι υπολογιστές φόρτωσης-αποθήκευσης (ή καταχωρητή-καταχωρητή) με έναν μόνο τελεστέο μνήμης και έναν ή δύο τρόπους διευθυνσιοδότησης. Είναι φανερό, σ'αυτή την περίπτωση, ότι ο τρόπος διευθυνσιοδότησης μπορεί να κωδικοποιηθεί σαν τμήμα του κωδικού λειτουργίας.
Κατά την κωδικοποίηση των εντολών, τόσο ο αριθμός των καταχωρητών όσο και ο αριθμός των τρόπων
διευθυνσιοδότησης έχουν σημαντική επίδραση στο μέγεθος των εντολών, αφού το πεδίο του τρόπου διευθυνσιοδότησης και το πεδίο του καταχωρητή μπορούν να εμφανιστούν πολλές φορές σε μια εντολή. Πράγματι, στις περισσότερες
εντολές καταναλώνονται πολλά περισσότερα bits στην κωδικοποίηση τρόπων διευθυνσιοδότησης και πεδίων καταχωρητών απ'ό,τι στον καθορισμό του κωδικού
λειτουργίας.
Επειδή
οι τρόποι διευθυνσιοδότησης και τα πεδία καταχωρητών καλύπτουν ένα μεγάλο
ποσοστό από τα bits της εντολής, η κωδικοποίησή τους θα επηρεάσει σημαντικά
το πόσο εύκολο θα είναι για μια υλοποίηση να αποκωδικοποιήσει τις εντολές.
Υπάρχουν
3 τρόποι για την κωδικοποίηση του συνόλου εντολών :
Μεταβλητή
κωδικοποίηση
Μεταβλητή
κωδικοποίηση
(variable
encoding)
Λειτουργία και αριθμός τελεστέων |
#1 |
#1 |
. . . |
#n |
#n |
Η μεταβλητή κωδικοποίηση επιτρέπει εικονικά σε όλους τους τρόπους διευθυνσιοδότησης να χρησιμοποιούνται από όλες τις εντολές. Συνήθως χρησιμοποιείται όταν υπάρχουν πολλοί τρόποι διευθυνσιοδότησης και πράξεις.
Η μεταβλητή κωδικοποίηση χρησιμοποιείται από τους υπολογιστές CISC (π.χ. VAX).
Παρακάτω παρουσιάζεται
μια σειρά από παραδείγματα κωδικοποίησης εντολών του VAX.
Παραδείγματα
Πώς
κωδικοποιούνται οι παρακάτω εντολές του VAX και ποια τα μεγέθη τους:
Α.
Με
την εντολή αυτή μηδενίζεται το περιεχόμενο της θέσης μνήμης, η διεύθυνση
της οποίας βρίσκεται στον καταχωρητή R4.
1 byte
|
Κωδικός λειτουργίας | |
|
R4 | Προσδιοριστής τελεστέου |
Όπως
παρατηρούμε το μέγεθος της εντολής είναι 2 bytes.
Στο πρώτο πεδίο βρίσκεται κωδικοποιημένη η πράξη καθώς και το πλήθος των
τελεστέων. Στο δεύτερο πεδίο βρίσκεται ο προσδιοριστής τελεστέου (operand
specifier) : στα 4 πρώτα bits βρίσκεται
κωδικοποιημένος ο τρόπος διευθυνσιοδότησης του τελεστέου (στο συγκεκριμένο
παράδειγμα είναι το 6) και στα επόμενα 4 καθορίζεται ο καταχωρητής που
χρησιμοποιείται.
Β.
Με
την εντολή αυτή μηδενίζεται το περιεχόμενο μεγέθους 16 - bits (λόγω
του γράμματος W στην εντολή CLR_
) που βρίσκεται στη μνήμη. Η διεύθυνση της
μνήμης υπολογίζεται προσθέτοντας την απευθείας τιμή 7(μετατόπιση) στο περιεχόμενο
του καταχωρητή R2.
1 byte
CLRW | Opcode | |
10 | R2 | Προσδιοριστής τελεστέου |
7 |
Όπως
παρατηρούμε το μέγεθος της εντολής είναι 3 bytes.
Στο πρώτο πεδίο βρίσκεται κωδικοποιημένη η πράξη καθώς και το πλήθος των
τελεστέων. Στο δεύτερο πεδίο, μεγέθους 2 bytes,
βρίσκεται ο προσδιοριστής τελεστέου: στα 4 πρώτα bits
βρίσκεται κωδικοποιημένος ο τρόπος διευθυνσιοδότησης του τελεστέου (στο
παράδειγμά μας είναι το 10), στα επόμενα 4 βρίσκεται ο καταχωρητής R2
και το τελευταίο byte περιέχει την
τιμή μετατόπισης.
Γ.
Με
την εντολή αυτή μηδενίζεται το περιεχόμενο μεγέθους 16 - bits (λόγω
του γράμματος W στην εντολή CLR_
) που βρίσκεται στη μνήμη. Η διεύθυνση της
μνήμης υπολογίζεται προσθέτοντας την απευθείας τιμή 100(μετατόπιση) στο
περιεχόμενο του καταχωρητή R2.
Το
σύμβολο Wδηλώνει
ότι η τιμή 100(μετατόπιση) είναι μεγέθους 2bytes.
1 byte
CLRW | Kωδικός λειτουργίας | |
12 | R2 | Προσδιοριστής τελεστέου |
100
|
Όπως παρατηρούμε το μέγεθος της εντολής είναι 4 bytes.
Στο πρώτο πεδίο βρίσκεται κωδικοποιημένη η πράξη καθώς και το πλήθος των
τελεστέων. Στο δεύτερο πεδίο, μεγέθους 3 bytes,
βρίσκεται ο προσδιοριστής τελεστέου: στα 4 πρώτα bits
βρίσκεται κωδικοποιημένος ο τρόπος διευθυνσιοδότησης του τελεστέου (στο
παράδειγμά μας είναι το 12), στα επόμενα 4 βρίσκεται ο καταχωρητής R2
και στα δύο τελευταία bytes περιέχεται
η τιμή μετατόπισης που είναι 100.
Δ.
Με την εντολή αυτή μηδενίζεται το περιεχόμενο μεγέθους 16 - bits
(λόγω του γράμματος W στην
εντολή CLR_ ) που βρίσκεται στη μνήμη.
Η διεύθυνση της μνήμης υπολογίζεται προσθέτοντας την απευθείας τιμή 1000(μετατόπιση)
στο περιεχόμενο του καταχωρητή R2.
Το
σύμβολο Lδηλώνει
ότι η τιμή 1000(μετατόπιση) είναι μεγέθους 4bytes.
1 byte
CLRW | Κωδικός λειτουργίας | |
14 | R2 | Προσδιοριστής τελεστέου |
1000 |
Όπως
παρατηρούμε το μέγεθος της εντολής είναι 6 bytes.
Στο πρώτο πεδίο βρίσκεται κωδικοποιημένη η πράξη καθώς και το πλήθος των
τελεστέων. Στο δεύτερο πεδίο, μεγέθους 5 bytes,
βρίσκεται ο προσδιοριστής τελεστέου: στα 4 πρώτα bits
βρίσκεται κωδικοποιημένος ο τρόπος διευθυνσιοδότησης του τελεστέου (στο
παράδειγμά μας είναι το 14), στα επόμενα 4 βρίσκεται ο καταχωρητής R2
και στα τέσσερα τελευταία bytes περιέχεται
η τιμή μετατόπισης που είναι 1000.
E.
Με την εντολή αυτή προσθέτουμε δύο πηγαίους τελεστέους οι οποίοι βρίσκονται
στη μνήμη και το αποτέλεσμα το περνάμε στον καταχωρητή R1. Ο
πρώτος τελεστέος βρίσκεται στη διεύθυνση μνήμης η οποία είναι καταχωρημένη
στον καταχωρητή R2. O δεύτερος βρίσκεται
στη διεύθυνση μνήμης η οποία υπολογίζεται προσθέτοντας την τιμή 50(μετατόπιση)
στο περιεχόμενο του καταχωρητή R3.
1 byte
ADDW3 | Κωδικός λειτουργίας | |
6 | R2 | Προσδιοριστής τελεστέου1 |
12 | R3 | Προσδιοριστής τελεστέου 2 |
50 | ||
5 | R1 | Προσδιοριστής τελεστέου 3 |
Όπως
παρατηρούμε το μέγεθος της εντολής είναι 5 bytes. Στο πρώτο πεδίο βρίσκεται
κωδικοποιημένη η πράξη καθως και το πλήθος των τελεστέων (που στο παράδειγμά
μας είναι τρεις). Στο δεύτερο πεδίο μεγέθους 1byte βρίσκεται ο προσδιοριστής
τελεστέου του 1ου τελεστέου : στα 4 πρώτα bits βρίσκεται κωδικοποιημένος
ο τρόπος διευθυνσιοδότησης του 1ου τελεστέου (στο παράδειγμά
μας είναι το 6), στα επόμενα 4 βρίσκεται ο καταχωρητής R1. Στο τρίτο πεδίο
μεγέθους 2 bytes βρίσκεται ο προσδιοριστής τελεστέου του 2ου
τελεστέου
και στο τελευταίο πεδίο μεγέθους 1 byte βρίσκεται ο προσδιοριστής τελεστέου
του 3ου τελεστέου (που είναι και ο τελεστέος
προορισμού).
ΔΡΑΣΤΗΡΙΟΤΗΤΑ 12
Σταθερή
κωδικοποίηση (fixed encoding)
|
|
|
|
Στη σταθερή κωδικοποίηση, η πράξη και ο τρόπος διευθυνσιοδότησης περιέχονται στον κωδικό λειτουργίας. Η κωδικοποίηση αυτή είναι αποδοτικότερη όταν υπάρχουν λίγοι τρόποι διευθυνσιοδότησης και λειτουργίες.
Η
αντιπαράθεση ανάμεσα στη μεταβλητή κωδικοποίηση και την σταθερή κωδικοποίηση
είναι το μέγεθος των προγραμμάτων απέναντι στην εύκολη αποκωδικοποίηση
από την κεντρική μονάδα επεξεργασίας. Η σταθερή κωδικοποίηση χρησιμοποιείται
από τους υπολογιστές RISC (π.χ. DLX, MIPS).
Παρακάτω παρουσιάζεται μια σειρά από παραδείγματα κωδικοποίησης εντολών
του DLX.
Πώς
κωδικοποιούνται οι παρακάτω εντολές του DLX :
A. LB R1,50(R2)
B. ADD R1,R2,R3
Γ. J name
το name συμβολίζει μια διεύθυνση μνήμης
Α.
Με την εντολή αυτή φορτώνουμε στον καταχωρητή R1, το περιεχόμενο της διεύθυνσης
μνήμης, η οποία υπολογίζεται προσθέτοντας την τιμή 50 στο περιεχόμενο του
καταχωρητή R2.
|
|
|
|
Στο πρώτο πεδίο (0..5 bits) βρίσκεται
κωδικοποιημένος ο τρόπος διευθυνσιοδότησης των τελεστέων. Στα επόμενα 5
bits(6..10 bits) βρίσκεται ο καταχωρητής
R2 (πηγαίος τελεστέος). Στα bits 11..15 βρίσκεται ο καταχωρητής προορισμού
R1. Τέλος στα 16 τελευταία bits
βρίσκεται η τιμή της μετατόπισης.
Β.
Με την εντολή αυτή προσθέτουμε τα περιεχόμενα των καταχωρητών
R2 και
R3 και το αποτέλεσμα το τοπθετούμε
στον καταχωρητή R1.
6 5 5 5 11 bits
|
|
|
|
|
Στο πρώτο πεδίο (0..5 bits) βρίσκεται
κωδικοποιημένη η πληροφορία ότι η εντολή είναι μια αριθμητική/λογική εντολή που χρησιμοποιεί μόνο καταχωρητές. Στο 2ο
και 3ο πεδίο βρίσκονται οι πηγαίοι τελεστέοι που είναι καταχωρημένοι στους καταχωρητές:R2 και
R3. Στο 4ο πεδίο ( 16..20
bits) βρίσκεται ο καταχωρητής προορισμού
R1. Στο τελευταίο πεδίο (21..31 bits)
βρίσκεται κωδικοποιημένη η πράξη που στο παράδειγμά μας είναι η πρόσθεση (ADD). Παρατηρούμε ότι ο τρόπος διευθυνσιοδότησης των τελεστέων είναι άμεσος καταχωρητή.
Γ.
Με την εντολή αυτή η ροή του προγράμματος μετατίθεται στη διεύθυνση name.
6 26 bits
|
|
Στο πεδίο των 26 bits βρίσκεται η τιμή (offset) που θα προστεθεί στον PC ώστε να δώσει το στόχο της μεταπήδησης (name).
Υβριδική
κωδικοποίηση (hybrid encoding)
Λειτουργία και αριθμός τελεστέων |
#1 |
#1 |
. . . |
#n |
#n |
|
|
|
|
|
|
|
|
Η υβριδική κωδικοποίηση είναι ουσιαστικά ο συνδυασμός των δύο παραπάνω μεθόδων. Μειώνει τη διαφοροποίηση στο μέγεθος και τη δουλειά της μεταβλητής αρχιτεκτονικής, αλλά παρέχει πολλαπλά μήκη εντολών με αποτέλεσμα τη μείωση του μεγέθους του κώδικα.
Η υβριδική κωδικοποίηση χρησιμοποιείται
στους υπολογιστές IBM 360/370 και Intel
80x86
ΔΡΑΣΤΗΡΙΟΤΗΤΑ 13
Να απαριθμήσετε τις μεθόδους κωδικοποίησης των εντολών και να εξηγήσετε τις διαφορές τους. στην περίπτωση που δυσκολεύεστε κρίνεται σκόπιμο να επαναλάβετε την ανάγνωση της προηγούμενης ενότητας «Κωδικοποίηση συνόλου εντολών».
ΔΡΑΣΤΗΡΙΟΤΗΤΑ 14
ΑΠΑΝΤΗΣΗ ΔΡΑΣΤΗΡΙΟΤΗΤΑΣ 14
ΔΡΑΣΤΗΡΙΟΤΗΤΑ 15
![]() |
![]() |
![]() |
![]() |
![]() |