Σύνολο εντολών του DLX
O DLX υποστηρίζει τέσσερις κατηγορίες εντολών:
Αριθμητικές και λογικές εντολές
Εντολές ελέγχου (Διακλαδώσεις με συνθήκη και μεταπηδήσεις)
Πράξεις
μεταξύ κλασματικών αριθμών (κινητής υποδιαστολής)
Δεν μπορεί να γίνει μεταφορά δεδομένων από μια θέση μνήμης σε κάποια άλλη με μια μόνο εντολή. Σε αυτή την περίπτωση είναι απαραίτητη η χρήση ενός καταχωρητή για την προσωρινή αποθήκευση των δεδομένων που θα πάρουμε από τη θέση μνήμης. ΔΡΑΣΤΗΡΙΟΤΗΤΑ 6
Για ποιο λόγο δεν είναι εφικτή η μεταφορά δεδομένων από μια θέση μνήμης σε μια άλλη στον υπολογιστή DLX; Στην περίπτωση που δυσκολεύεστε να απαντήσετε στην ερώτηση, καλό θα ήταν να ανατρέξετε στην 2η ενότητα και συγκεκριμένα στην υποενότητα «Λειτουργίες που υποστηρίζουν οι υπολογιστές RISC και CISC».
Παράδειγμα
Ποια
είναι η λειτουργία της παρακάτω εντολής φόρτωσης του DLX;
LBU R1,40(R3) (Load Byte Unsigned)
Η εντολή αυτή χρησιμοποιείται για να φορτωθεί ένα byte σε ένα 32-bit καταχωρητή R1 και τα υπόλοιπα 24 bits του καταχωρητή να γεμίσουν με μηδενικά (unsigned). Μπορούμε να περιγράψουμε την εντολή σε μια συμβολική γλώσσα ως εξής:
Regs[R1]¬ 32 024 ## MEM[40+Regs[R3]]
Το 024 σημαίνει ότι δημιουργείται ένα πεδίο μεγέθους 24 bits που περιέχει μόνο μηδενικά. Στη συνέχεια συνδέεται στο πεδίο αυτό το byte που βρίσκεται στη θέση μνήμης η διεύθυνση της οποίας υπολογίζεται προσθέτοντας το περιεχόμενο του καταχωρητή R3 με την τιμή 40 (MEM[40+Regs[R3]]), για την εύρεση δηλαδή της διεύθυνσης της μνήμης που βρίσκεται ο πηγαίος τελεστέος χρησιμοποιείται ο τρόπος διευθυνσιοδότησης με μετατόπιση. Η σύνδεση αυτή συμβολίζεται με το σύμβολο ##.
Χρησιμοποιώντας διευθυνσιοδότηση με μετατόπιση μπορεί να υπολογιστεί η
διεύθυνση μνήμης στην οποία θα αποθηκευτούν τα δύο λιγότερο σημαντικά bytes
του καταχωρητή R3. Η διεύθυνση μνήμης
υπολογίζεται από το άθροισμα του περιεχομένου του καταχωρητή
R2
με
την τιμή 502. Μπορούμε να περιγράψουμε την εντολή σε μια συμβολική γλώσσα
ως εξής:
MEM[502+Regs[R2]] ¬ 16 Regs[R3]16..31
To
σύμβολο
¬
16
σημαίνει
ότι μεταφέρονται 16 bits στη μνήμη και το σύμβολο Regs[R3]16..31
σημαίνει
ότι παίρνουμε τα δύο λιγότερο σημαντικά bytes (lower half) του
καταχωρητή R3.
ΔΡΑΣΤΗΡΙΟΤΗΤΑ 7
Να εξηγήσετε τον τρόπο με τον οποίο εκτελούνται οι παρακάτω εντολές του υπολογιστή DLX, χρησιμοποιώντας συμβολισμούς.
LW R1,30(R2)
Φόρτωση λέξης
LW R1, 1000(R0)
Φόρτωση λέξης
LB R1, 40(R3)
Φόρτωση byte
LBU R1,40(R3)
Φόρτωση μη προσημασμένου byte
LH R1, 40(R3)
Φόρτωση μισής λέξης
LF F0, 50(R3)
Φόρτωση μεταβλητής κινητής υποδιαστολής
LD F0, 50(R2)
Φόρτωση διπλής λέξης
SW 500(R4), R3
Αποθήκευση λέξης
SF 40(R3), F0
Αποθήκευση μεταβλητής κινητής υποδιαστολής
SD 40(R3), F0
Αποθήκευση διπλής λέξης
SH 502(R2), R3
Αποθήκευσης μισής λέξης
SB 41(R3), R2
Αποθήκευση byte
Aριθμητικές και λογικές εντολές
Όλες οι αριθμητικές και λογικές λειτουργίες είναι εντολές στις οποίες οι πηγαίοι τελεστέοι και οι τελεστέοι προορισμού βρίσκονται σε καταχωρητές, υπονοώντας ότι ο τρόπος διευθυνσιοδότησης των τελεστέων ο άμεσος καταχωρητή. Περιλαμβάνουν:
Αριθμητικές και λογικές πράξεις (πρόσθεση, αφαίρεση, AND, OR, XOR, συγκρίσεις, ολισθήσεις). Ένας πηγαίος τελεστέος μπορεί να είναι απευθείας δεδομένο των 16 bits με επέκταση προσήμου. Η λειτουργία LHI (Load High Immediate ), φορτώνει στο πάνω μισό ενός καταχωρητή την απευθείας τιμή που δίνεται, ενώ τοποθετεί 0 στο κάτω μισό.
Εντολές σύγκρισης (=, Ή , <, > , £
, ³ ). Τοποθετούν
1 ή 0 στον καταχωρητή προορισμού ανάλογα με το αποτέλεσμα της σύγκρισης.
Οι κωδικοί των εντολών είναι set-equal, set-not-equal, set-less-than κ.ο.κ.
Παράδειγμα
SLT R1,R2,R3 (Set Less Than)
Με
την εντολή αυτή συγκρίνονται τα περιεχόμενα του R2 και R3 και ο καταχωρητής
R1 παίρνει την τιμή 1 ή την τιμή 0, ανάλογα με το αποτέλεσμα της σύγκρισης.
Έτσι αν το περιεχόμενο του R2 είναι
μικρότερο απ' αυτό του R3 τότε ο καταχωρητής R1 τίθεται 1, διαφορετικά τίθεται
0. Μπορούμε να περιγράψουμε την εντολή αυτή σε συμβολική γλώσσα ως εξής
:
If (Regs[R2] < Regs[R3])
Παράδειγμα
SGTI R1,R2,#50 (Set Greater Than Immediate)
Παρατηρώντας
ότι στον κωδικό της εντολής υπάρχει το γράμμα Ι που δηλώνει ότι ένας πηγαίος
τελεστέος είναι απευθείας δεδομένο (στο παράδειγμά μας είναι η τιμή 50).
Με την εντολή αυτή συγκρίνονται τo περιεχόμενo του R2 με την τιμή 50 και
ο καταχωρητής R1 παίρνει την τιμή 1 ή την τιμή 0, ανάλογα με το αποτέλεσμα
της σύγκρισης. Έτσι αν το περιεχόμενο του R2 είναι
μεγαλύτερο από την τιμή 50 τότε ο καταχωρητής R1 τίθεται 1, διαφορετικά
τίθεται 0. Μπορούμε να περιγράψουμε την εντολή αυτή σε συμβολική γλώσσα
ως εξής :
If (Regs[R2] > 50)
ΔΡΑΣΤΗΡΙΟΤΗΤΑ 8
Ποια
είναι η σημασία της παρακάτω λογικής εντολής του DLX;
Regs[R1] ¬ 1
else
Regs[R1] ¬ 0
Ποια
είναι η σημασία της παρακάτω λογικής εντολής του DLX;
Regs[R1] ¬ 1
else
Regs[R1] ¬ 0
ADD R1, R2, R3
Πρόσθεση
ADDI R1, R2, #3
Απευθείας πρόσθεση
LHI R1, #42
Απευθείας φόρτωση στα δύο πιο σημαντικά bytes
SLLI R1, R2, #5
Απευθείας αριστερή λογική ολίσθηση
STL R1, R2, R3
Θέσε μικρότερο από (set less than)
Παράδειγμα
JALR R2 (Jump And Link Register)
Η εντολή
αυτή είναι μια εντολή μεταπήδησης με σύνδεσμο. Η διεύθυνση της επόμενης
εντολής τοποθετείται στον καταχωρητή R31,
ενώ η διεύθυνση του στόχου είναι το περιεχόμενο του καταχωρητή R2.
Μπορούμε να περιγράψουμε την εντολή αυτή σε μια συμβολική γλώσσα ως εξής
:
Regs[R31] ¬ PC + 4;
Παράδειγμα
BEZ R2, name (Branch if Equal Zero)
Η εντολή
αυτή είναι μια εντολή διακλάδωση. Αν το περιεχόμενο του καταχωρητή R2
είναι ίσο με το 0 τότε στον απαριθμητή προγράμματος (PC) φορτώνεται το
name, με άλλα λόγια η επόμενη εντολή που θα εκτελεστεί είναι η εντολή που
βρίσκεται στη διεύθυνση μνήμης name. Μπορούμε
να περιγράψουμε την εντολή αυτή σε μια συμβολική γλώσσα ως εξής :
If (Regs[R2] = 0)
ΔΡΑΣΤΗΡΙΟΤΗΤΑ 9
Ποια
η λειτουργία της παρακάτω εντολής ελέγχου ροής προγράμματος του DLX;
PC ¬ Regs[R2]
Ποια
η λειτουργία της παρακάτω εντολής ελέγχου ροής προγράμματος του DLX;
το name συμβολίζει μια διεύθυνση μνήμης
then
PC ¬ name;
J name
Μεταπήδηση
JAL name
Μεταπήδηση και σύνδεση
JALR R2
Μεταπήδηση και σύνδεση καταχωρητή
JR R3
Μεταπήδηση καταχωρητή
BEQZ R4, name
Διακλάδωση ίση με μηδέν
BNEZ R4, name
Διακλάδωση άνιση με μηδέν
Πράξεις μεταξύ κλασματικών αριθμών (κινητής υποδιαστολής)
Οι εντολές κινητής υποδιαστολής χρησιμοποιούν τους καταχωρητές κινητής υποδιαστολής και καθορίζουν το αν μία πράξη που θα πραγματοποιηθεί είναι απλής ή διπλής ακρίβειας. Οι εντολές αυτές είναι:
Παρακάτω, παρουσιάζεται
ο συγκεντρωτικός πίνακας που περιλαμβάνει όλους του τύπους εντολών του
DLX καθώς και τη σημασία της κάθε εντολής.
Τύπος εντολής/ κωδικός πράξης | Σημασία εντολής |
Μεταφορές
δεδομένων
LB, LBU, SB LH, LHU, SH LW, SW LF, LD, SF, SD
MOVI2S, MOVS2I MOVF, MOVD
MOVFP2I, MOVI2FP |
Μετακίνηση
δεδομένων μεταξύ καταχωρητών και μνήμης, ή μεταξύ του ακεραίου και FP ή
ειδικούς καταχωρητές. Μόνος τρόπος διευθυνσιοδότησης είναι με μετατόπιση
(16-bit μετατόπιση + περιεχόμενα ενός καταχωρητή γενικής χρήσης).
Φόρτωση byte, φόρτωση byte χωρίς πρόσημο, αποθήκευση byte Φόρτωση μισής λέξης, φόρτωση μισής λέξης χωρίς πρόσημο αποθήκευση μισής λέξης. Φόρτωση λέξης, αποθήκευση λέξης (σε/από καταχωρητη ακεραίων) Φόρτωση καταχωρητή κινητής
υποδιαστολής απλής ακρίβειας, φόρτωση καταχωρητή κινητής υποδιαστολής διπλής
ακρίβειας, αποθήκευση καταχωρητή κινητής υποδιαστολής απλής ακρίβειας,
αποθήκευση καταχωρητή κινητής υποδιαστολής διπλής ακρίβειας
Μετακίνηση από/σε καταχωρητή γενικής χρήσης σε/από έναν ειδικό καταχωρητή Αντιγραφή του περιεχομένου
ενός καταχωρητή κινητής υποδιαστολής ή ενός ζεύγους καταχωρητών γενικής
χρήσης σε άλλον καταχωρητή ή ζεύγος
Μετακίνηση 32 bits από/σε καταχωρητές κινητής υποδιαστολής σε/από ακέραιους καταχωρητές |
Αριθμητικές/λογικές
ADD, ADDI, ADDU, ADDUI SUB, SUBI, SUBU, SUBUI MULT, MULTU, DIV, DIVU
AND, ANDI OR, ORI, XOR, XORI LHI SLL, SRL, SRA, SLLI, SRLI, SRAI S_, S_I |
Πράξεις
σε ακέραια ή λογικά δεδομένα που βρίσκονται σε καταχωρητές γενικής χρήσης.
Προσημασμένη αριθμητική Παγίδα και υπερχείλιση.
Πρόσθεση, απευθείας πρόσθεση (όλα τα απευθείας δεδομένα είναι 16 bits) με πρόσημο και χωρίς. Αφαίρεση, απευθείας αφαίρεση προσημασμένη και μη. Πολλαπλασιασμός και διαίρεση, προσημασμένα και μη. Οι τελεστέοι πρέπει να βρίσκονται σε καταχωρητές κινητής υποδιαστολής. Όλες οι πράξεις παίρνουν και δίνουν τιμές 32-bitς. And, απευθείας and. Or, απευθείας or, αποκλειστικό or, απευθείας αποκλειστικό or. Φόρτωση στα δύο πιο σημαντικά bytes ενός καταχωρητή μια απευθείας τιμή των 16 bits. Ολισθήσεις : απευθείας (S_I) και μεταβλητή (S_) μορφή. Οι ολισθήσεις είναι αριστερές λογικές, δεξιές λογικές, δεξιές αριθμητικές. Η συνθήκη: "_" μπορεί να είναι LT,GT, LE, GE, EQ, NE |
Έλεγχος
BEQZ, BNEZ J, JR JAL, JALR TRAP RFE |
Υπό
συνθήκη διακλαδώσεις και μεταπηδήσεις. PC-σχετικές ή μέσω καταχωρητών
Διακλάδωση αν το περιεχόμενο του καταχωρητή είναι ίσο/άνισο με το μηδέν. 16-bit offset από PC+4 Μεταπηδήσεις : 26-bit offset από PC+4 (J) ή στόχος σε καταχωρητή (JR). Μεταπήδηση και σύνδεση : σώσε PC+4 στον R31,στόχος είναι PC-σχετικός(JAL) ή ένας καταχωρητής (JALR). Μεταφορά στο λειτουργικό σύστημα σε ένα διάνυσμα διεύθυνσης Επιστροφή στον χρησιμοποιούμενο κώδικα από μία εξαίρεση. Επαναφύλαξη του Τρόπου του χρήστη. |
Κινητής
υποδιαστολής
ADDD, ADDF SUBD, SUBF MULTD, MULTF DIVD, DIVF
CVTF2D, CVTF2I
|
FP
πράξεις σε DP και SP τύπους
Πρόσθεση κλασματικών αριθμών Αφαίρεση κλασματικών αριθμών Πολλαπλασιασμός κλασματικών αριθμών Διαίρεση κλασματικών αριθμών
Εντολές μετατροπής : CVTX2y μετατρέπει από τον τύπο x στον τύπο y, όπου x και y είναι I (ακέραιος), D (διπλής ακρίβειας), ή F (απλής ακρίβειας). Και οι δύο Τελεστέοι βρίσκονται σε καταχωρητές κινητής υποδιαστολής |
Θα πιστεύετε ίσως, ότι μία αρχιτεκτονική σαν αυτή του DLX με απλούς τύπους εντολών, απλούς τρόπους διευθυνσιοδότησης, και απλές πράξεις, θα ήταν αργή κυρίως επειδή θα έπρεπε να εκτελέσει περισσότερες εντολές (αντί για λιγότερες και πιο πολύπλοκες). Για να δοθεί απάντηση στο ερώτημα αυτό, χρειάστηκε να συγκρίνουμε έναν υπολογιστή που μοιάζει με τον DLX (επιλέχτηκε ο MIPS M2000) με κάποιον άλλο με πολυπλοκότερη αρχιτεκτονική συνόλου εντολών (επιλέχτηκε ο VAX 8700). Όπως αποδείχθηκε, ο MIPS εκτελούσε σχεδόν τις διπλάσιες εντολές σε σχέση με τον VAX, ενώ ο CPI για τον VAX ήταν περίπου έξι φορές μεγαλύτερος από ότι αυτός για τον MIPS. Το τελικό συμπέρασμα ήταν ότι ο MIPS Μ2000 είχε περίπου τρεις φορές μεγαλύτερη απόδοση από αυτήν του VAX 8700. Αυτό συμβαίνει γιατί οι υπολογιστές όπως ο DLX επιτρέπουν σε διαφορετικά τμήματα διαφορετικών εντολών να εκτελούνται ταυτόχρονα (σωλήνωση).