Προγραμματισμός

Γνώση Υπολογιστών >> Προγραμματισμός >  >> Γλώσσες Προγραμματισμού Υπολογιστών

Ποιοι είναι οι διαφορετικοί opcodes MIPS ALU που χρησιμοποιούνται για την εκτέλεση αριθμητικών και λογικών λειτουργιών σε έναν επεξεργαστή;

Τα MIPS alu opcodes χρησιμοποιούνται στο funct Πεδίο οδηγιών τύπου R για τον προσδιορισμό της ακριβούς λειτουργίας που εκτελείται από τη μονάδα αριθμητικής λογικής (ALU). Το πεδίο `opcode` στην εντολή είναι πάντα '0x00' για οδηγίες τύπου R και το πεδίο` funct` διακρίνει μεταξύ διαφορετικών λειτουργιών. Ακολουθεί μια κατανομή των κοινών κωδικών Funct MIPS ALU και των αντίστοιχων εργασιών τους, ομαδοποιημένες με τύπο για λόγους σαφήνειας:

αριθμητικές λειτουργίες:

* `add` (προσθήκη):

* `funct =0x20` (100000 σε δυαδικό)

* Προσθέτει δύο καταχωρητές και αποθηκεύει το αποτέλεσμα σε ένα μητρώο προορισμού. Η υπερχείλιση * κάνει * να προκαλέσει εξαίρεση.

* `addu` (προσθήκη unsigned):

* `funct =0x21` (100001 σε δυαδικό)

* Προσθέτει δύο καταχωρητές και αποθηκεύει το αποτέλεσμα σε ένα μητρώο προορισμού. Η υπερχείλιση * αγνοείται * (χωρίς εξαίρεση). Χρησιμοποιήστε αυτό για αρθρωτή αριθμητική ή όταν γνωρίζετε ότι η υπερχείλιση είναι αδύνατη/αποδεκτή.

* `Sub '(αφαίρεση):

* `funct =0x22` (100010 σε δυαδικό)

* Αφαιρεί ένα μητρώο από το άλλο και αποθηκεύει το αποτέλεσμα σε ένα μητρώο προορισμού. Η υπερχείλιση * κάνει * να προκαλέσει εξαίρεση.

* `Subu` (αφαίρεση χωρίς υπογραφή):

* `funct =0x23` (100011 σε δυαδικό)

* Αφαιρεί ένα μητρώο από το άλλο και αποθηκεύει το αποτέλεσμα σε ένα μητρώο προορισμού. Η υπερχείλιση * αγνοείται * (χωρίς εξαίρεση).

* `mult '(πολλαπλασιασμός):

* `funct =0x18` (011000 σε δυαδικό)

* Πολλαπλασιάζεται δύο μητρώα. Το αποτέλεσμα 64-bit αποθηκεύεται στα μητρώα `hi` και` lo`.

* `multu` (πολλαπλασιασμός μη υπογεγραμμένος):

* `funct =0x19` (011001 σε δυαδικό)

* Πολλαπλασιάζει δύο καταχωρητές ως μη υπογεγραμμένες τιμές. Το αποτέλεσμα 64-bit αποθηκεύεται στα μητρώα `hi` και` lo`.

* `div` (τμήμα):

* `funct =0x1a` (011010 σε δυαδικό)

* Διαιρεί ένα μητρώο από άλλο. Το πηλίκο αποθηκεύεται στο μητρώο `lo` και το υπόλοιπο αποθηκεύεται στο μητρώο` hi '.

* `divu` (διαίρεση unsigned):

* `funct =0x1b` (011011 σε δυαδικό)

* Διαιρεί ένα μητρώο από ένα άλλο ως μη υπογεγραμμένες τιμές. Το πηλίκο αποθηκεύεται στο μητρώο `lo` και το υπόλοιπο αποθηκεύεται στο μητρώο` hi '.

Λογικές λειτουργίες:

* και `(bitwise και):

* `funct =0x24` (100100 σε δυαδικό)

* Εκτελεί ένα bitwise και λειτουργία σε δύο καταχωρητές και αποθηκεύει το αποτέλεσμα σε ένα μητρώο προορισμού.

* ή `(bitwise ή):

* `funct =0x25` (100101 σε δυαδικό)

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

* `xor` (bitwise xor):

* `funct =0x26` (100110 σε δυαδικό)

* Εκτελεί μια λειτουργία Bitwise XOR (αποκλειστική ή) σε δύο καταχωρητές και αποθηκεύει το αποτέλεσμα σε ένα μητρώο προορισμού.

* nor '(bitwise nor):

* `funct =0x27` (100111 σε δυαδικό)

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

* `sll` (μετατόπιση αριστερά λογική):

* `funct =0x00` (000000 σε δυαδικό)

* Μετατοπίζει ένα μητρώο που αφήνεται από έναν καθορισμένο αριθμό bits (που καθορίζεται στο πεδίο `Shamt` της οδηγίας τύπου R). Τα μηδενικά μετατοπίζονται από τα δεξιά.

* `srl` (shift right logical):

* `funct =0x02` (000010 σε δυαδικό)

* Μετατοπίζει ένα καταχωρητή δεξιά με έναν καθορισμένο αριθμό bits (που καθορίζεται στο πεδίο `Shamt` της οδηγίας τύπου R). Τα μηδενικά μετατοπίζονται από τα αριστερά.

* `sra` (μετατόπιση δεξιάς αριθμητικής):

* `funct =0x03` (000011 σε δυαδικό)

* Μετατοπίζει ένα καταχωρητή δεξιά με έναν καθορισμένο αριθμό bits (που καθορίζεται στο πεδίο `Shamt` της οδηγίας τύπου R). Το σήμα Bit (το πιο σημαντικό bit) αναπαράγεται και μετατοπίζεται από τα αριστερά, διατηρώντας το σημάδι του αριθμού.

set-on-less-than (σχεσιακές λειτουργίες):

* `slt` (set λιγότερο από):

* `funct =0x2a` (101010 σε δυαδικό)

* Ορίζει το μητρώο προορισμού στο 1 εάν ο πρώτος καταχωρητής είναι μικρότερος από το δεύτερο μητρώο και 0 διαφορετικά. Αντιμετωπίζει τα μητρώα ως υπογεγραμμένους ακέραιους.

* `sltu` (ρυθμίστε λιγότερο από μη υπογεγραμμένο):

* `funct =0x2b` (101011 σε δυαδικό)

* Ορίζει το μητρώο προορισμού στο 1 εάν ο πρώτος καταχωρητής είναι μικρότερος από το δεύτερο μητρώο και 0 διαφορετικά. Αντιμετωπίζει τα μητρώα ως μη υπογεγραμμένους ακέραιους ακέραιους.

Άλλες λειτουργίες ALU (σημαντικές, αλλά όχι άμεσες λειτουργίες ALU με την ίδια έννοια με τα παραπάνω):

* `mfhi` (μετακίνηση από hi):

* `funct =0x10` (010000 σε δυαδικό)

* Μετακινεί την τιμή από το μητρώο `hi` (το οποίο αποθηκεύει τα επάνω 32 bits ενός αποτελέσματος πολλαπλασιασμού ή το υπόλοιπο ενός τμήματος) σε ένα μητρώο γενικής χρήσης.

* `mflo` (Μετακίνηση από lo):

* `funct =0x12` (010010 σε δυαδικό)

* Μετακινεί την τιμή από το μητρώο `lo` (το οποίο αποθηκεύει τα χαμηλότερα 32 bits ενός αποτελέσματος πολλαπλασιασμού ή το πηλίκο ενός τμήματος) σε ένα μητρώο γενικής χρήσης.

* `mthi` (Μετακίνηση στο HI):

* `funct =0x11` (010001 σε δυαδικό)

* Μετακινεί την τιμή από ένα μητρώο γενικής χρήσης στο μητρώο HI.

* `mtlo` (Μετακίνηση σε lo):

* `funct =0x13` (010011 σε δυαδικό)

* Μετακινεί την τιμή από ένα μητρώο γενικής χρήσης στο μητρώο LO.

* `jr` (μητρώο άλματος):

* `funct =0x08` (001000 σε δυαδικό)

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

* `syscall` (κλήση συστήματος):

* `funct =0x0c` (001100 σε δυαδικό)

* Επικαλείται το λειτουργικό σύστημα για την εκτέλεση μιας υπηρεσίας συστήματος. Η ζητούμενη υπηρεσία προσδιορίζεται από έναν κωδικό στο μητρώο `$ v0` (` $ 2`).

Σημαντικές εκτιμήσεις:

* μορφή τύπου R: Όλες αυτές οι οδηγίες είναι R-Type, που σημαίνει ότι χρησιμοποιούν την ακόλουθη μορφή:

`opcode | RS | RT | RD | Shamt | funct`

Οπου:

* `opcode`:Πάντα 0x00 για οδηγίες τύπου R.

* `rs`:Πηγή μητρώου 1

* `RT`:Πηγή μητρώου 2

* `rd`:μητρώο προορισμού

* `Shamt`:Ποσό μετατόπισης (χρησιμοποιείται μόνο με οδηγίες μετατόπισης)

* `funct`:Ο κωδικός λειτουργίας που καθορίζει τη συγκεκριμένη λειτουργία.

* μη υπογεγραμμένο εναντίον υπογεγραμμένου: Το επίθημα `u` (π.χ.,` addu`, `subu`,` multu`, `divu`,` sltu`) δείχνει ότι οι τελεστές αντιμετωπίζονται ως μη υπογεγραμμένοι ακέραιοι. Αυτό επηρεάζει τον τρόπο χειρισμού της υπερχείλισης και του τρόπου με τον οποίο πραγματοποιούνται συγκρίσεις.

* Hi και Lo Registers: Τα μητρώα `hi` και` lo` είναι καταχωρητές ειδικού σκοπού που χρησιμοποιούνται για την αποθήκευση των αποτελεσμάτων των εργασιών πολλαπλασιασμού και διαίρεσης.

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

Αυτή η ολοκληρωμένη κατανομή θα πρέπει να σας δώσει μια σταθερή κατανόηση των Opcodes MIPS ALU (κωδικούς funct) και των λειτουργιών που εκτελούν. Όταν γράφετε συναρμολόγηση MIPS, ανατρέξτε πάντοτε στη συγκεκριμένη τεκμηρίωση για την αρχιτεκτονική MIPS που στοχεύετε για να εξασφαλίσετε την ακρίβεια.

Συναφής σύστασή

Πνευματικά δικαιώματα © Γνώση Υπολογιστών Όλα τα δικαιώματα κατοχυρωμένα