Πίσω

Δραστηριότητα 3

Να εξηγήσετε τον τρόπο με τον οποίο εκτελούνται οι εντολές στο παρακάτω τμήμα μικροκώδικα.

Loc. Label Dest ALU S1 S2 C Misc Cond Jump label
50 Beq:   SUB A Constant 0   0? Branch
51               Uncond Ifetch
52 Bne:   SUB A Const 0   0? Branch
53 Branch PC ADD PC Imm16     Uncond Ifetch
54 Jump PC ADD PC Imm26     Uncond Ifetch
55 JReg: PC Pass S1 A       Uncond Ifetch
56 JAL: C Pass S1 PC          
57   PC ADD PC Imm26   R31 ¬ C Uncond Ifetch
58 JALR: C Pass S1 PC          
59   PC Pass S1 A     R31¬ C Uncond Ifetch
60 Trap: IAR: Pass S1 PC          
61   PC Pass S2   Imm26        


Απάντηση δραστηριότητας 3

Το τμήμα του μικροκώδικα αντιστοιχεί στις εντολές διακλάδωσης (Branch) και μεταπήδησης (Jump) του DLX:

H μικροεντολή 50 αντιστοιχεί στην εντολή Branch equal zero (Διακλάδωση εάν ίσο με μηδέν). Εάν ο Α είναι ίσος με μηδέν τότε η επόμενη μικροεντολή είναι η μικροεντολή 53 με τίτλο "Branch:", αλλιώς η επόμενη μικροεντολή είναι η μικροεντολή με τίτλο "Ifetch:". Ο έλεγχος για το αν ο Α είναι 0 γίνεται ως εξής: από τον Α που βρίσκεται στην αρτηρία S1 αφαιρείται το 0 που βρίσκεται στην αρτηρία S2. Η πράξη της αφαίρεσης γίνεται στην ALU (SUB). Σύμφωνα με το πεδίο Cond της μικροεντολής αν το αποτέλεσμα της αφαίρεσης είναι 0 τότε η επόμενη μικροεντολή είναι η μικροεντολή 53 με τίτλο "Branch:", αλλιώς η επόμενη μικροεντολή είναι η 51. Η μικροεντολή 51 δηλώνει ότι η επόμενη μικροεντολή είναι η μικροεντολή με τίτλο "Ifetch:". Σύμφωνα με τη μικροεντολή 53 προστίθεται στον PC (που βρίσκεται στην αρτηρία S1) η απευθείας τιμή imm16 (που βρίσκεται στην αρτηρία S2) ώστε να υπολογιστεί ο στόχος της διακλάδωσης. Το αποτέλεσμα της πρόσθεσης που γίνεται στην ALU (ADD) καταχωρείται στον PC (Dest) και στη συνέχεια γίνεται ανάκληση της εντολής που δείχνει ο PC, αφού το πεδίο Jump label δηλώνει ότι η επόμενη μικροεντολή είναι η μικροεντολή με τίτλο "Ifetch:" που κάνει ανάκληση εντολής. Παρόμοια μπορούμε να εξηγήσουμε και την εντολή Branch if Not Equal (BNE).
Η μικροεντολή 56 είναι μια εντολή Jump And Link. Αρχικά το περιεχόμενο του PC που βρίσκεται στην αρτηρία S1 περνά στον καταχωρητή C (Dest) μέσω της ALU. Η ALU δεν εκτελεί καμία πράξη στο περιεχόμενο του PC (Pass S1). Η επόμενη μικροεντολή είναι η μικροεντολή 57. Τώρα υπολογίζεται ο στόχος της μεταπήδησης. Στον PC (που βρίσκεται στην αρτηρία S1) προστίθεται η απευθείας τιμή Ιmm26 (που βρίσκεται στην αρτηρία S2) ώστε να υπολογιστεί ο στόχος. Η πρόσθεση γίνεται στην ALU (ADD) και το αποτέλεσμα καταχωρείται στον PC (Dest). Το πεδίο Misc της μικροεντολής δηλώνει ότι στον καταχωρητή R31 καταχωρείται η τιμή του C. Η επόμενη μικροεντολή έχει τίτλο "Ifetch:", δηλαδή ανακαλείται η επόμενη εντολή με διεύθυνση το στόχο της μεταπήδησης. Με ίδιο τρόπο μπορούν να εξηγηθούν και οι υπόλοιπες μικροεντολές.