Η μικροπρογραμματιζόμενη μονάδα ελέγχου για αριθμητικές και λογικές εντολές
Οι αριθμητικές και λογικές εντολές βρίσκονται στο Σχήμα 3.4.11. Οι δύο πρώτες μικροεντολές αντιστοιχούν στις καταστάσεις που βρίσκονται στην κορυφή του Σχήματος 3.3.6 της ενότητας 3.
Όπως φαίνεται στη μικροεντολή 2 του σχήματος 3.4.10 της προηγούμενης υποενότητας, η διεύθυνση της επόμενης μικροεντολής καθορίζεται από τον Πίνακα Διευθύνσεων 1. Έτσι αν η εντολή είναι μια αριθμητική και λογική εντολή πρέπει να καταχωρηθεί στον Temp η τιμή του Β ή η απευθείας τιμή (αν ο κωδικός λειτουργίας δηλώνει ότι ο πηγαίος τελεστέος είναι απευθείας δεδομένο). Όπως βλέπουμε από τον Πίνακα διευθύνσεων 1 αν ο κωδικός λειτουργίας της εντολής δηλώνει ότι ο πηγαίος τελεστέος βρίσκεται στον καταχωρητή Β τότε η επόμενη μικροεντολή έχει διεύθυνση 23 και τίτλο (label) "Reg:", ενώ αν ο πηγαίος τελεστέος είναι απευθείας δεδομένο τότε η επόμενη μικροεντολή έχει διεύθυνση 24 και τίτλο (label) "Imm:".
Στο Σχήμα 3.4.11 παρουσιάζεται η σειρά των μικροεντολών για την εκτέλεση αριθμητικών και λογικών εντολών μετά την αποκωδικοποίηση (έχουν προηγηθεί οι μικροεντολές του σχήματος 3.4.10):
Loc. | Label | Dest | ALU | S1 | S2 | C | Misc | Cond | Jump label | Σχόλια |
23 | Reg | Temp | Pass S2 | B | Decode2 | Source2=reg | ||||
24 | Imm | Temp | Pass S2 | Ιmm | Decode3 | Source2=imm | ||||
25 | ADD/I | C | ADD | A | Temp | Uncond | Write2 | ADD | ||
26 | SUB/I | C | SUB | A | Temp | Uncond | Write2 | SUB | ||
27 | AND/I | C | AND | A | Temp | Uncond | Write2 | AND | ||
28 | OR/I | C | OR | A | Temp | Uncond | Write2 | OR | ||
29 | XOR/I | C | XOR | A | Temp | Uncond | Write2 | XOR | ||
30 | SLL/I | C | SLL | A | Temp | Uncond | Write2 | SLL | ||
31 | SRL/I | C | SRL | A | Temp | Uncond | Write2 | SRL | ||
32 | SRA/I | C | SRA | A | Temp | Uncond | Write2 | SRA | ||
33 | LHI | C | SLL | Temp | Constant | 16 | Uncond | Write2 | LHI | |
34 | Write2 | Rd¬ C | Uncond | Ifetch | Επανεγγραφή και πήγαινε στην επόμενη εντολή |
Σχήμα 3.4.11 - Όπως στις δύο πρώτες καταστάσεις του σχήματος 3.3.6 της υποενότητας 2, οι μικροεντολές 23 και 24 φορτώνουν στον Temp έναν πηγαίο τελεστέο και στη συνέχεια δείχνουν στην επόμενη μικροεντολή, που εξαρτάται από τον κωδικό λειτουργίας της εντολής. Η μικροεντολή 23 φορτώνει στον Temp το περιεχόμενο του καταχωρητή Β, ενώ η εντολή 24 φορτώνει στον Temp την απευθείας τιμή. Αυτό γίνεται ως εξής: ο πηγαίος τελεστεός (Β ή Imm) που βρίσκεται στην αρτηρία S2 περνά στον Temp μέσω της ALU. Η ALU δεν εκτελεί καμία πράξη με τον τελεστέο αυτό απλά τον αφήνει να περάσει (αυτό σημαίνει ο συμβολισμός Pass S2). Για να εξοικονομηθεί χώρος χρησιμοποιείται η ίδια μικροεντολή για τελεστέο που είναι καταχωρητής και για τελεστέο που είναι απευθείας τιμή. Η επόμενη μικροεντολή καθορίζεται από τον Πίνακα Διευθύνσεων 2 και 3 και εξαρτάται από τον κωδικό λειτουργίας της εντολής. Έτσι αν η εντολή είναι μια εντολή πρόσθεσης (ADD) τότε σύμφωνα με τον Πίνακα Διευθύνσεων 2 η επόμενη μικροεντολή έχει διεύθυνση 25 και τίτλο (label) "ADD/I". Ο Temp που βρίσκεται στην αρτηρία S2 και ο Α που βρίσκεται στην αρτηρία S1 περνούν στην ALU και γίνεται πρόσθεση (ADD). Το αποτέλεσμα καταχωρείται στον C όπως φαίνεται στο πεδίο Dest της μικροεντολής. Η επόμενη μικροεντολή (χωρίς κανένα έλεγχο-Uncond) έχει τίτλο (label) "Write2" και διεύθυνση 34. Η μικροεντολή αυτή καταχωρεί το περιεχόμενο του C στον Rd. Η επόμενη μικροεντολή έχει τίτλο "Ifetch" , δηλαδή ανακαλείται η επόμενη εντολή του προγράμματος.
ΔΡΑΣΤΗΡΙΟΤΗΤΑ 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 |