Κεφάλαιο2 | Ενότητα3 | Ερωτήσεις επισκόπησης | Επόμενο | Προηγούμενο | Λεξικό όρων


 


Κωδικοποίηση συνόλου εντολών

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

ΔΡΑΣΤΗΡΙΟΤΗΤΑ 11

Θυμάστε με ποιον τρόπο καθορίζεται η λειτουργία που πρόκειται να εκτελεστεί από μία εντολή; Για περισσότερες λεπτομέρειες καλό θα ήταν να ανατρέξετε στην 1η ενότητα αυτού του κεφαλαίου και συγκεκριμένα στην υποενότητα «Αρχιτεκτονικές συνόλου εντολών».

ΑΠΑΝΤΗΣΗ ΔΡΑΣΤΗΡΙΟΤΗΤΑΣ 11


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

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

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

Υπάρχουν 3 τρόποι για την κωδικοποίηση του συνόλου εντολών :

Μεταβλητή κωδικοποίηση

Σταθερή κωδικοποίηση

Υβριδική κωδικοποίηση

Μεταβλητή κωδικοποίηση
        (variable encoding)
 
Λειτουργία και αριθμός τελεστέων
Προσδιοριστής διεύθυνσης
#1
Πεδίο διεύθυνσης
#1 
. . .
Προσδιοριστής διεύθυνσης
#n
Πεδίο διεύθυνσης
#n 

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

Η μεταβλητή κωδικοποίηση χρησιμοποιείται από τους υπολογιστές CISC (π.χ. VAX).

   Παρακάτω παρουσιάζεται μια σειρά από παραδείγματα κωδικοποίησης εντολών του VAX.

Παραδείγματα

            Πώς κωδικοποιούνται οι παρακάτω εντολές του VAX και ποια τα μεγέθη τους:

    Α. CLRL (R4) , αν ο έμμεσος τρόπος διεθυνσιοδότησης έχει κωδικό 6.
    Β. CLRW B­ 7(R2) , αν ο τρόπος διευθυνσιοδότησης με μετατόπιση (B­ ) έχει κωδικό 10.
    Γ. CLRW W­ 100(R2), αν ο τρόπος διευθυνσιοδότησης με μετατόπιση (W­ ) έχει κωδικό 12.
    Δ. CLRW L­ 1000(R2), αν ο τρόπος διευθυνσιοδότησης με μετατόπιση (L­ ) έχει κωδικό 14.
    Ε. ADDW3 (R2),50(R3),R1 , αν ο τρόπος διευθυνσιοδότησης άμεσος καταχωρητή έχει κωδικό 5, ο έμμεσος με καταχωρητή έχει κωδικό 6 και ο τρόπος με μετατόπιση έχει κωδικό 12.
     

    Α.
    Με την εντολή αυτή μηδενίζεται το περιεχόμενο της θέσης μνήμης, η διεύθυνση της οποίας βρίσκεται στον καταχωρητή R4.

                     1 byte
        CLRL
       Κωδικός λειτουργίας
        6 
           R4    Προσδιοριστής τελεστέου
           4 bits               4 bits

    Όπως παρατηρούμε το μέγεθος της εντολής είναι 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

    * Να εξηγήσετε με ποιον τρόπο έχει κωδικοποιηθεί η παρακάτω εντολή του VAX: ADDI3 R1, 737(R2), (R3)
    * Ποιο είναι το συνολικό μήκος της εντολής σε bytes;

    ΑΠΑΝΤΗΣΗ ΔΡΑΣΤΗΡΙΟΤΗΤΑΣ 12





    Σταθερή κωδικοποίηση (fixed encoding)
     
    Λειτουργία
    Πεδίο διεύθυνσης #1
    Πεδίο διεύθυνσης #2
    Πεδίο διεύθυνσης #3

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

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

    Πώς κωδικοποιούνται οι παρακάτω εντολές του DLX :
             A.  LB R1,50(R2)
            B.  ADD R1,R2,R3
            Γ.  J name              το name συμβολίζει μια διεύθυνση μνήμης

    Α.
         Με την εντολή αυτή φορτώνουμε στον καταχωρητή R1, το περιεχόμενο της διεύθυνσης μνήμης, η οποία υπολογίζεται προσθέτοντας την τιμή 50 στο περιεχόμενο του καταχωρητή R2.

     
      6                    5                5                            16         bits
    LB
    R2
    R1
    50

       Στο πρώτο πεδίο (0..5 bits) βρίσκεται κωδικοποιημένος ο τρόπος διευθυνσιοδότησης των τελεστέων. Στα επόμενα 5 bits(6..10 bits) βρίσκεται ο καταχωρητής R2 (πηγαίος τελεστέος). Στα bits 11..15 βρίσκεται ο καταχωρητής προορισμού R1. Τέλος στα 16 τελευταία bits βρίσκεται η τιμή της μετατόπισης.
     

    Β.
       Με την εντολή αυτή προσθέτουμε τα περιεχόμενα των καταχωρητών
    R2 και R3 και το αποτέλεσμα το τοπθετούμε στον καταχωρητή R1.

             6                       5                  5                  5                      11       bits
     Kωδικός λειτουργίας 
    R2
    R3
    R1
    ADD

       Στο πρώτο πεδίο (0..5 bits) βρίσκεται κωδικοποιημένη η πληροφορία ότι η εντολή είναι μια αριθμητική/λογική εντολή που χρησιμοποιεί μόνο καταχωρητές. Στο 2ο και 3ο πεδίο βρίσκονται οι πηγαίοι τελεστέοι που είναι καταχωρημένοι στους καταχωρητές:R2 και R3. Στο 4ο πεδίο ( 16..20 bits) βρίσκεται ο καταχωρητής προορισμού R1. Στο τελευταίο πεδίο (21..31 bits) βρίσκεται κωδικοποιημένη η πράξη που στο παράδειγμά μας είναι η πρόσθεση (ADD). Παρατηρούμε ότι ο τρόπος διευθυνσιοδότησης των τελεστέων είναι άμεσος καταχωρητή.
     

    Γ.
       Με την εντολή αυτή η ροή του προγράμματος μετατίθεται στη διεύθυνση name.

                6                                                     26             bits
    J
    offset

        Στο πεδίο των 26 bits βρίσκεται η τιμή (offset) που θα προστεθεί στον PC ώστε να δώσει το στόχο της μεταπήδησης (name).




     

    Υβριδική κωδικοποίηση (hybrid encoding)
     
     
    Λειτουργία και αριθμός τελεστέων
    Προσδιοριστής διεύθυνσης
    #1
    Πεδίο διεύθυνσης
    #1 
    . . .
    Προσδιοριστής διεύθυνσης
    #n
    Πεδίο διεύθυνσης
    #n 


  1.  
    Λειτουργία
    Προσδιοριστής τελεστέου #1
    Προσδιοριστής τελεστέου #2 
    Πεδίο διεύθυνσης

     
    Λειτουργία
    Προσδιοριστής τελεστέου 
    Πεδίο διεύθυνσης #1 
    Πεδίο διεύθυνσης #2 

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

    Η υβριδική κωδικοποίηση χρησιμοποιείται στους υπολογιστές IBM 360/370 και Intel 80x86


    ΔΡΑΣΤΗΡΙΟΤΗΤΑ 13

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


    ΔΡΑΣΤΗΡΙΟΤΗΤΑ 14

    * Με ποιον τρόπο κωδικοποιείται η παρακάτω εντολή του υπολογιστή VAX και ποιο είναι το μέγεθός της σε bytes;

    MOVB B 50(R1),(R2)
    Να θεωρήσετε πως ο έμμεσος καταχωρητή τρόπος διευθυνσιοδότησης έχει κωδικό 6 και ο τρόπος διευθυνσιοδότησης με μετατόπιση (Β) έχει κωδικό 10.
    * Να εξηγήστε την εντολή χρησιμοποιώντας συμβολισμούς.

    ΑΠΑΝΤΗΣΗ ΔΡΑΣΤΗΡΙΟΤΗΤΑΣ 14


    ΔΡΑΣΤΗΡΙΟΤΗΤΑ 15

    * Με ποιον τρόπο κωδικοποιείται η παρακάτω εντολή του υπολογιστή VAX και ποιο είναι το μέγεθός της σε bytes;

    ADDW3 (R1), W 400(R2), @ B 200(R3)
    Να θεωρήσετε πως ο έμμεσος με καταχωρητή τρόπος διευθυνσιοδότησης έχει κωδικό 6, ο τρόπος διευθυνσιοδότησης με μετατόπιση (W) έχει κωδικό 12 και ο έμμεσος με μετατόπιση (B) έχει κωδικό 11.
    * Να εξηγήστε την εντολή χρησιμοποιώντας συμβολισμούς.

    ΑΠΑΝΤΗΣΗ ΔΡΑΣΤΗΡΙΟΤΗΤΑΣ 15