Τ.Ε.Ι. Κρήτης Τμ. Μηχανικών Πληροφορικής Αρχιτεκτονική Υπολογιστών 9 ο Μάθημα
Γλώσσα Μηχανής – Δυαδική Απεικόνιση Μέχρι στιγμής χρησιμοποιούμε την assembly: – Δίνουμε ονόματα σε πράξεις (όπως add) και σε συντελεστές (όπως $10) – Χρησιμοποιήσαμε branches και jumps με την βοήθεια labels και όχι καταχωρητών – Όπως έχουμε δει ως ένα βαθμό, οι assemblers χρησιμοποιούν πολλές ψευδο-εντολές (όπως η la)
Γλώσσα Μηχανής – Δυαδική Απεικόνιση Τα προγράμματα πρέπει σταδιακά να μεταφράζονται σε γλώσσα μηχανής, μια δυαδική μορφή η οποία μπορεί να καταχωρείται στη μνήμη και να αποκωδικοποιείται από την CPU Η γλώσσα μηχανής του MIPS είναι σχεδιασμένη ώστε να αποκωδικοποιείται εύκολα: – Κάθε instruction του MIPS έχει το ίδιο μήκος, 32 bits – Υπάρχουν μόνο τρεις (3) μορφές εντολών, οι οποίες μοιάζουν πολύ μεταξύ τους R-type Format I-type Format J-type Format
R-type Format Αριθμητικές instructions χρησιμοποιούν το Register-to-Register (R-type) format: Αυτό το format περιέχει 6 διαφορετικά πεδία:
R-type Format op: Είναι ένας κώδικας πράξης (operation code) ο οποίος επιλέγει μια συγκεκριμένη πράξη rs και rt: Είναι ο πρώτος και ο δεύτερος καταχωρητής πηγής rd: Ο καταχωρητής προορισμού shamt: Χρησιμοποιείται μόνο για τις shift instructions func: Χρησιμοποιείται μαζί με το op για να επιλέξουν μια αριθμητική εντολή
R-type Format Έστω ότι έχουμε την παραπάνω εντολή. – To πρώτο και τελευταίο πεδίο (0 & 32) σε συνδυασμό δηλώνουν ότι η πράξη που θα εκτελεστεί είναι η πρόσθεση. – Το δεύτερο πεδίο δίνει τον αριθμό του καταχωρητή ($17) που είναι η πηγή του πρώτου τελεσταίου της πρόσθεση. – Το τρίτο πεδίο δίνει τον αριθμό του καταχωρητή ($18) που είναι η πηγή του δεύτερου τελεσταίου της πρόσθεσης. – Το τέταρτο πεδίο δίνει τον αριθμό του καταχωρητή ($8) που θα δεχτεί το αποτέλεσμα της πρόσθεσης. – Το πέμπτο πεδίο δεν χρησιμοποιείται σε αυτή την εντολή και για αυτό παίρνει την τιμή 0.
Όταν μια εντολή χρειάζεται μεγαλύτερα πεδία από αυτά που δίνονται πιο πάνω παρουσιάζονται προβλήματα Για παράδειγμα, στην εντολή lw πρέπει να προσδιορισθούν δύο καταχωρητές και μια διεύθυνση. Αν οι διευθύνσεις χρειάζονταν μόνο 5 bits (=25 ή 32 θέσεις μνήμης ) τότε αυτό θα ήταν δυνατό Όμως, αυτό το μέγεθος είναι πολύ μικρό για να μπορέσει να χρησιμοποιηθεί για διευθύνσεις δεδομένων Οι σχεδιαστές του MIPS αποφάσισαν να κρατήσουν όλες τις εντολές στοίδιο μήκος -32 bits- – διαφορετικά είδη εντολών θα πρέπει να έχουν διαφορετική μορφή
I-type Format Ένα δεύτερο είδος εντολής ονομάζεται I-type και χρησιμοποιείται από τις εντολές μετακίνησης δεδομένων (π.χ. lw, sw addi κλπ) Για παράδειγμα για την εντολή: lw $8, Astart ($19) – Η τιμή 19 θα τοποθετηθεί στο πεδίο Rs – Η τιμή 8 θα τοποθετηθεί στο πεδίο Rt – και η βάση της διεύθυνσης του πίνακα Astart στο πεδίο διευθύνσεων (address) – Σημειώστε ότι το πεδίο Rt στην εντολή lw δίνει το πεδίο που θα πάρει το αποτέλεσμα
Πολλές μορφές εντολών προκαλούν πολυπλοκότητα στο υλικό μπορούμε να μειώσουμε την πολυπλοκότητα κρατώντας τις μορφές των εντολών παρόμοιες Για παράδειγμα, – τα πρώτα τρία πεδία στις μορφές R-type και I-type έχουν τα ίδια ονόματα και – το τέταρτο πεδίο στην I-type είναι ίσο με το μήκος των άλλων τριών πεδίων του R-type. Οι διάφορες μορφές/τύποι των εντολών ξεχωρίζουν από τις τιμές που δίνονται στο πρώτο πεδίο (op). Η κάθε μορφή παίρνει συγκεκριμένες τιμές στο πεδίο op, γι’ αυτό και παραδοσιακά το πεδίο αυτό ονομάζεται opcode - κωδικός εντολής
Kωδικοποιήσεις μερικών από τις εντολές που μελετήσαμε μέχρι τώρα Μεγέθη των πεδίων για τις πιο πάνω εντολές Οι εντολές add και sub έχουν το ίδιο op πεδίο. Το πεδίο func προσδιορίζει ποιά αριθμητική πράξη (πρόσθεση ή αφαίρεση) πρέπει να εκτελεστεί
Παράδειγμα Έστω οι παρακάτω εντολές: – lw $8, 12($19) – add $8, $18, $8 – sw $8, 12($19) OpRsRtAddress lw$19$812 OpRsRtRdshamtfunc add$18$8 032 OpRsRtAddress sw$19$812
Άρα αυτό που θα δει η CPU είναι:
J-type Format Αυτό το format το χρησιμοποιεί μόνο η j, jal και jr
Πώς κάνουμε decode; Έστω ότι έχουμε τις ακόλουθες 6 εντολές σε δεκαεξαδικό: hex Ahex hex hex 20A5FFFFhex hex Και θεωρούμε ότι η πρώτη εντολη βρίσκεται στη διεύθυνση 0x
Βήμα πρώτο - Decoding Μετατρέπουμε το hex σε binary:
Βήμα Δεύτερο – Decoding Στη συνέχεια αναγνωρίζουμε το opcode και το format των εντολών: – Επιλέγουμε τα opcode bits για να αναγνωρίσουμε το format:
Βήμα Δεύτερο – Decoding Δείτε το opcode: – 0 σημαίνει R-type format – 2 ή 3 J-type format – Οτιδήποτε άλλο σημαίναι I-type format Στη συνέχεια χωρίζουμε τα πεδία με βάση το format των εντολών:
Βήμα Τρίτο – Decoding Στη συνέχεια μεταφράζουμε: Διευθύνσεις μνήμης Την or δεν την έχουμε δει
Εντολές:
Μετατρέψτε: add $9, $10, $11 sub $19, $20, $21 lw $6, 40($11) sw $25, 0($19) Και: x