Αρχιτεκτονική Υπολογιστών Ι



Σχετικά έγγραφα
Δρ. Παναγιώτης Μ. Παπάζογλου Επίκουρος Καθηγητής ΤΕΙ Λαμίας. Διδακτικό βοήθημα γρήγορης μελέτης για τον προγραμματισμό του μικροεπεξεργαστή MIPS 32bit

Εργαστήριο Αρχιτεκτονική Υπολογιστών Ι ΤΡΑΠΕΖΑ ΘΕΜΑΤΩΝ. Άσκηση 2 Ποιες οι τιμές των καταχωρητών μετά την εκτέλεση του προγράμματος ;

Αρχιτεκτονική Υπολογιστών Ι

Παραδείγματα Assembly (Μέρος

Εισαγωγή στους Η/Υ. Γιώργος Δημητρίου. Μάθημα 2 ο. Πανεπιστήμιο Θεσσαλίας - Τμήμα Πληροφορικής

Λύσεις 1 ης Ενδιάμεσης Εξέτασης στο ΗΜΥ213

Λύσεις 1 ης Ενδιάμεσης Εξέτασης στο ΗΜΥ213

Chapter 2. Εντολές : Η γλώσσα του υπολογιστή. (συνέχεια) Η διασύνδεση Υλικού και λογισμικού David A. Patterson και John L.

ΜΥΥ- 402 Αρχιτεκτονική Υπολογιστών Φροντιστήριο: MIPS assembly

Παραδείγματα Assembly Μέρος Γ

ΗΜΥ 213. Εργαστήριο Οργάνωσης Ηλεκτρονικών Υπολογιστών και Μικροεπεξεργαστών. Διδάσκων: Δρ. Γιώργος Ζάγγουλος

ΗΥ 232 Οργάνωση και Σχεδίαση Υπολογιστών. Διάλεξη 3 Εντολές του MIPS (2)

Προτεινόμενες Λύσεις 1 ης Ενδιάμεσης Εξέτασης στο ΗΜΥ213 & Αποτελέσματα

Αρχιτεκτονική Υπολογιστών

Chapter 2. Εντολές : Η γλώσσα του υπολογιστή. Τρίτη (3 η ) δίωρη διάλεξη. Η διασύνδεση Υλικού και λογισμικού David A. Patterson και John L.

Εντολές του MIPS (2)

Εισαγωγή στους Η/Υ. Γιώργος Δημητρίου. Μάθημα 3-4: Προγραμματισμός MIPS. Πανεπιστήμιο Θεσσαλίας - Τμήμα Πληροφορικής

ΗΜΥ 213 Εργαστήριο Οργάνωσης Ηλεκτρονικών Υπολογιστών και Μικροεπεξεργαστών

Αρχιτεκτονική Υπολογιστών

Μετατροπή χαρακτήρων ASCII σε αριθμό (atoi) & διάβασμα, και αποθήκευση του περιεχομένου του στη μνήμη. (Διάλεξη. Πανεπιστήμιο Κύπρου

ΗΜΥ 213 Εργαστήριο Οργάνωσης Ηλεκτρονικών Υπολογιστών και Μικροεπεξεργαστών

Αρχιτεκτονική Υπολογιστών

Τμήμα Ηλεκτρολόγων Μηχανικών και Μηχανικών H/Y Department of Electrical and Computer Engineering. Εργαστήριο 1. Χειμερινό Εξάμηνο

Chapter 2. Εντολές : Η γλώσσα του υπολογιστή. (συνέχεια) Η διασύνδεση Υλικού και λογισμικού David A. Patterson και John L.

Chapter 2. Εντολές : Η γλώσσα του υπολογιστή. (συνέχεια) Η διασύνδεση Υλικού και λογισμικού David A. Patterson και John L.

Chapter 2. Εντολές : Η γλώσσα του υπολογιστή. (συνέχεια) Η διασύνδεση Υλικού και λογισμικού David A. Patterson και John L.

Οργάνωση Υπολογιστών

ΗΜΥ 213 Εργαστήριο Οργάνωσης Ηλεκτρονικών Υπολογιστών και Μικροεπεξεργαστών

ΗΜΥ 213 Εργαστήριο Οργάνωσης Ηλεκτρονικών Υπολογιστών και Μικροεπεξεργαστών

Διαδικασίες ΙI. ΗΥ 134 Εισαγωγή στην Οργάνωση και στον Σχεδιασμό Υπολογιστών Ι. Διάλεξη 5

Αρχιτεκτονική Υπολογιστών

Αρχιτεκτονική Μικροεπεξεργαστών MIPS-32. Αρχείο καταχωρητών και Χάρτης Μνήµης

Πολλαπλασιασμός και Διαίρεση Ακεραίων

ΗΜΥ 213 Εργαστήριο Οργάνωσης Υπολογιστών και Μικροεπεξεργαστών

Πανεπιστήμιο Θεσσαλίας Τμήμα Μηχανικών Η/Υ, Τηλεπικοινωνιών και Δικτύων

Chapter 3 Αριθμητική Υπολογιστών

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

Άσκηση 1 (α) Άσκηση 1 (γ) Άσκηση 1 (β) Παραδείγματα Assembly. Άρα με έλεγχο στον $t1 αποφασίζω αν είναι 0 ή 1.

Τ.Ε.Ι. Κρήτης Τμ. Μηχανικών Πληροφορικής. Αρχιτεκτονική Υπολογιστών. 3ο Μάθημα

6. Επιστροφή ελέγχου στο σημείο εκκίνησης

Υποστήριξη διαδικασιών στο υλικό των υπολογιστών

1 η Άσκηση Στην Αρχιτεκτονική Υπολογιστών

Σύγχρονες Αρχιτεκτονικές Υπολογιστών

Λύσεις 2 ης Ενδιάμεσης Εξέτασης στο ΗΜΥ213

1 η Ενδιάμεση Εξέταση Απαντήσεις/Λύσεις

Chapter 3. Αριθμητική Υπολογιστών. Έβδομη (7 η ) δίωρη διάλεξη. Η διασύνδεση Υλικού και λογισμικού David A. Patterson και John L.

ΗΜΥ 213 Εργαστήριο Οργάνωσης Ηλεκτρονικών Υπολογιστών και Μικροεπεξεργαστών

ΗΜΥ 213 Εργαστήριο Οργάνωσης Ηλεκτρονικών Υπολογιστών και Μικροεπεξεργαστών

Συναρτήσεις-Διαδικασίες

Πανεπιστήμιο Θεσσαλίας Τμήμα Πληροφορικής

Μετατροπή χαρακτήρων ASCII σε ακέραιο αριθµό (atoi) & Άνοιγµα αρχείου µέσα από τo QtSPIM, διάβασµα, και αποθήκευση του περιεχοµένου του στη µνήµη

MIPS functions and procedures

Τρόποι Διευθυνσιοδότησης

ΠΑΝΕΠΙΣΤΗΜΙΟ ΘΕΣΣΑΛΙΑΣ ΠΟΛΥΤΕΧΝΙΚΗ ΣΧΟΛΗ ΤΜΗΜΑ ΗΛΕΚΤΡΟΛΟΓΩΝ ΜΗΧΑΝΙΚΩΝ ΚΑΙ ΜΗΧΑΝΙΚΩΝ Η/Υ ΠΡΩΤΗ ΠΡΟΟΔΟΣ ΣΤΗΝ «ΟΡΓΑΝΩΣΗ ΚΑΙ ΣΧΕΔΙΑΣΗ Η/Y»

Διαδικασίες Ι. ΗΥ 134 Εισαγωγή στην Οργάνωση και στον Σχεδιασμό Υπολογιστών Ι. Διάλεξη 4

ΤΕΧΝΟΛΟΓΙΚΟ ΕΚΠΑΙΔΕΥΤΙΚΟ ΙΔΡΥΜΑ ΛΑΜΙΑΣ. A. Μετατροπή αριθμών 1. Μετατροπή αριθμών από δεκαδικό σε δυαδικό σύστημα αρίθμησης

Εργαστήριο 4. Εαρινό Εξάμηνο ΠΡΟΣΟΧΗ: Αρχίστε νωρίς το Εργαστήριο 4. Οι ασκήσεις είναι πιο απαιτητικές από τα προηγούμενα εργαστήρια.

Οργάνωση και Σχεδίαση Υπολογιστών Η Διασύνδεση Υλικού και Λογισμικού, 4 η έκδοση. Σύντομη Εισαγωγή στη χρήση του προσομοιωτή και συμβολομεταφραστή

add $t0,$zero, $zero I_LOOP: beq $t0,$s3, END add $t1, $zero,$zero J_LOOP: sub $t2, $s3, $t0 add $t2, $t2, $s1 int i, j, tmp; int *arr, n;

Αναδρομή. ΗΥ 232 Οργάνωση και Σχεδίαση Υπολογιστών. Διάλεξη 6. Νίκος Μπέλλας Τμήμα Μηχανικών Η/Υ, Τηλεπικοινωνιών και Δικτύων

ΗΜΥ 213 Εργαστήριο Οργάνωσης Ηλεκτρονικών Υπολογιστών και Μικροεπεξεργαστών

Αρχιτεκτονική Υπολογιστών Ασκήσεις Εργαστηρίου

Οργάνωση Η/Υ. Γιώργος Δημητρίου. Μάθημα 8 ο Μερική Επικάλυψη. Πανεπιστήμιο Θεσσαλίας - Τμήμα Πληροφορικής

Προγραμματισμός Η/Υ (ΤΛ2007 )

Αρχιτεκτονική υπολογιστών

ΕΘΝΙKΟ ΜΕΤΣΟΒΙΟ ΠΟΛΥΤΕΧΝΕΙΟ ΣΧΟΛΗ ΗΛΕΚΤΡΟΛΟΓΩΝ ΜΗΧΑΝΙΚΩΝ ΚΑΙ ΜΗΧΑΝΙΚΩΝ ΥΠΟΛΟΓΙΣΤΩΝ ΕΡΓΑΣΤΗΡΙΟ ΥΠΟΛΟΓΙΣΤΙΚΩΝ ΣΥΣΤΗΜΑΤΩΝ. Ονοματεπώνυμο: ΑΜ:

ΕΠΛ605 Εργασία 1 Ημερομηνία Παράδοσης 12/9/2018 στην αρχή του μαθήματος

ΠΑΝΕΠΙΣΤΗΜΙΟ ΘΕΣΣΑΛΙΑΣ ΠΟΛΥΤΕΧΝΙΚΗ ΣΧΟΛΗ ΔΕΥΤΕΡΗ ΠΡΟΟΔΟΣ ΣΤΗΝ ΟΡΓΑΝΩΣΗ ΣΤΟΥΣ Η/Y (ΗΥ232)

Δείγμα Τελικής Εξέτασης στο ΗΜΥ213. Διδάσκοντας: Γιώργος Ζάγγουλος

Οργάνωση Υπολογιστών ΕΛΛΗΝΙΚΗ ΔΗΜΟΚΡΑΤΙΑ ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΡΗΤΗΣ. Ασκήσεις 5: Εντολές Συγκρίσεων και Μεταφοράς Ελέγχου. Μανόλης Γ.Η.

Chapter 5. Ο επεξεργαστής: διαδρομή δεδομένων και μονάδα ελέγχου. Ενδέκατη (11 η ) δίωρη διάλεξη.

Προγραμματιστικό Περιβάλλον

Διαδικασιακός Προγραμματισμός

Οργάνωση επεξεργαστή (1 ο μέρος) ΜΥΥ-106 Εισαγωγή στους Η/Υ και στην Πληροφορική

Αντικειμενοστρεφής Προγραμματισμός -Python. Κ.Π. Γιαλούρης

Αρχιτεκτονική Υπολογιστών Ασκήσεις Εργαστηρίου

Αρχιτεκτονική Υπολογιστών

ΠΛΕ- 027 Μικροεπεξεργαστές

Διαδικασιακός Προγραμματισμός

ΗΥ 232 Οργάνωση και Σχεδίαση Υπολογιστών. Διάλεξη 2 Οργάνωση μνήμης Καταχωρητές του MIPS Εντολές του MIPS 1

ΗΜΥ 213. Εργαστήριο Οργάνωσης Ηλεκτρονικών Υπολογιστών και Μικροεπεξεργαστών LAB 1 ( )

Αρχιτεκτονική Υπολογιστών Ι

Σημειώσεις για τον 80x86

8 FORTRAN 77/90/95/2003

Εργαστήριο 3. Εαρινό Εξάμηνο

Αριθμητική Υπολογιστών (Κεφάλαιο 3)

Στοιχεία από Assembly Γιώργος Μανής

Τεχνολογίες ημιαγωγών. Chapter 2 Instructions: Language of the Computer 1

Δομημένος Προγραμματισμός (ΤΛ1006)

Α. Δίνονται οι. (i) στη. πρέπει να. πιο. (ii) $a0. $s0 θα πρέπει να. αποθήκευση. αυξάνει τον. f: sub sll add sub jr. h: addi sw sw.

Πανεπιστήμιο Θεσσαλίας Τμήμα Ηλεκτρολόγων Μηχανικών και Μηχανικών Υπολογιστών

2η ΑΣΚΗΣΗ ΣΤΗΝ ΑΡΧΙΤΕΚΤΟΝΙΚΗ ΥΠΟΛΟΓΙΣΤΩΝ Ακ. έτος , 5ο Εξάμηνο Σχολή ΗΜ&ΜΥ

Κεφάλαιο 2. Εντολές: η γλώσσα του υπολογιστή

Αρχιτεκτονική Υπολογιστών

Διαδικασιακός Προγραμματισμός

Σκοπός. Αλγεβρικοί και Λογικοί Υπολογισμοί στη PASCAL

ΑΡΧΙΤΕΚΤΟΝΙΚΗ HARDWARE ΥΠΟΛΟΓΙΣΤΙΚΩΝ ΣΥΣΤΗΜΑΤΩΝ

2 η Ενδιάμεση Εξέταση Λύσεις/Απαντήσεις

ΟΡΓΑΝΩΣΗ ΚΑΙ ΣΧΕΔΙΑΣΗ Η/Υ

Transcript:

Αρχιτεκτονική Υπολογιστών Ι Επιλεγμένες εντολές και συναρτήσεις assembly Από το βιβλίο Αρχιτεκτονική Υπολογιστών & Προγραμματισμός Assembly (Συγγραφέας / Εκδότης : Παναγιώτης Παπάζογλου) Δρ. Παναγιώτης Παπάζογλου / Εργαστήριο Αρχιτεκτονική Υπολογιστών Ι / Σελίδα 1

add τιμής Πρόσθεση περιεχομένου δύο καταχωρητών ή καταχωρητή και ακέραιας Σύνταξη add k1,k2,kt k1,k2 = καταχωρητής (όνομα καταχωρητή) kt = καταχωρητής (όνομα καταχωρητή) ή ακέραια τιμή Πραγματοποιείται πρόσθεση του περιεχομένου του καταχωρητή k2 και του καταχωρητή ή της ακέραιας τιμής kt και το αποτέλεσμα αποθηκεύεται στον καταχωρητή k1. Δηλαδή γίνεται η πράξη k1=k2+kt. Παράδειγμα #Πρόσθεση καταχωρητών add $t0,$t1,$t2 #$t0=$t1+$t2 #Πρόσθεση καταχωρητή και ακέραιας τιμής add $t0,$t1,4 #$t0=$t1+4 #Υλοποίηση της πρόσθεσης $t0=$t1+$t2+$t3 add $t0,$t1,$t2 add $t0,$t0,$t3 Αυτή η αριθμητική εντολή λειτουργεί ως ψευδοεντολή όταν το τρίτο όρισμα είναι ακέραιος αριθμός αφού η πραγματική εντολή είναι η addi. Δρ. Παναγιώτης Παπάζογλου / Εργαστήριο Αρχιτεκτονική Υπολογιστών Ι / Σελίδα 2

sub Αφαίρεση περιεχομένου δύο καταχωρητών ή ακέραιας τιμής από καταχωρητή Σύνταξη sub k1,k2,kt k1,k2 = καταχωρητής (όνομα καταχωρητή) kt = καταχωρητής (όνομα καταχωρητή) ή ακέραια τιμή Πραγματοποιείται αφαίρεση του περιεχομένου του καταχωρητή ή της ακέραιας τιμής kt από τον καταχωρητή k2 και το αποτέλεσμα αποθηκεύεται στον καταχωρητή k1. Δηλαδή γίνεται η πράξη k1=k2-kt. Παράδειγμα #Αφαίρεση καταχωρητών sub $t0,$t1,$t2 #$t0=$t1-$t2 #Αφαίρεση ακέραιας τιμής από καταχωρητή sub $t0,$t1,4 #$t0=$t1-4 #Υλοποίηση της αφαίρεσης $t0=$t1-$t2-$t3 sub $t0,$t1,$t2 sub $t0,$t0,$t3 Δρ. Παναγιώτης Παπάζογλου / Εργαστήριο Αρχιτεκτονική Υπολογιστών Ι / Σελίδα 3

mul Πολλαπλασιασμός περιεχομένου δύο καταχωρητών ή ακέραιας τιμής και καταχωρητή Σύνταξη mul k1,k2,kt k1,k2 = καταχωρητής (όνομα καταχωρητή) kt = καταχωρητής (όνομα καταχωρητή) ή ακέραια τιμή Πραγματοποιείται πολλαπλασιασμός του περιεχομένου του καταχωρητή ή της ακέραιας τιμής kt με τον καταχωρητή k2 και το αποτέλεσμα αποθηκεύεται στον καταχωρητή k1. Δηλαδή γίνεται η πράξη k1=k2*kt. Παράδειγμα #Πολλαπλασιασμός καταχωρητών mul $t0,$t1,$t2 #$t0=$t1*$t2 #Πολλαπλασιασμός ακέραιας τιμής και καταχωρητή mul $t0,$t1,4 #$t0=$t1*4 #Υλοποίηση του πολλαπλασιασμού $t0=$t1*$t2*$t3 mul $t0,$t1,$t2 mul $t0,$t0,$t3 Δρ. Παναγιώτης Παπάζογλου / Εργαστήριο Αρχιτεκτονική Υπολογιστών Ι / Σελίδα 4

div (τρία ορίσματα) Σύνταξη Διαίρεση περιεχομένου δύο καταχωρητών ή καταχωρητή με ακέραια τιμή div k1,k2,kt k1,k2 = καταχωρητής (όνομα καταχωρητή) kt = καταχωρητής (όνομα καταχωρητή) ή ακέραια τιμή Πραγματοποιείται διαίρεση του περιεχομένου του καταχωρητή k2 με τον καταχωρητή ή την ακέραια τιμή kt και το αποτέλεσμα (πηλίκο) αποθηκεύεται στον καταχωρητή k1. Δηλαδή γίνεται η πράξη k1=k2/kt. Παράδειγμα #Διαίρεση καταχωρητών div $t0,$t1,$t2 #$t0=$t1/$t2 #Διαίρεση καταχωρητή με ακέραια τιμή div $t0,$t1,4 #$t0=$t1/4 Σημείωση Επειδή δουλεύουμε αποκλειστικά με ακέραια αριθμητική, τυχόν κλασματικό μέρος σε αποτέλεσμα δεν εμφανίζεται. Δηλαδή αν το αποτέλεσμα μιας διαίρεσης είναι για παράδειγμα 0.7 το αποτέλεσμα που θα πάρουμε θα είναι μηδέν (απόρριψη κλασματικού μέρους). Δρ. Παναγιώτης Παπάζογλου / Εργαστήριο Αρχιτεκτονική Υπολογιστών Ι / Σελίδα 5

div (δύο ορίσματα) Διαίρεση περιεχομένου δύο καταχωρητών και αυτόματη αποθήκευση του αποτελέσματος Σύνταξη div k1,k2 k1,k2 = καταχωρητής (όνομα καταχωρητή) Πραγματοποιείται διαίρεση του περιεχομένου των καταχωρητών k1 και k2 και το αποτέλεσμα αποθηκεύεται αυτόματα στους καταχωρητές ειδικής χρήσης HI και LO (HI=Υπόλοιπο, LO=Πηλίκο). Παράδειγμα #Διαίρεση με ακέραια τιμή li $t2,2 #φόρτωση της ακέραιας τιμής για τη διαίρεση $t1/2 div $t1,$t2 Σημείωση Επειδή οι καταχωρητές HI και LO είναι ειδικής χρήσης δεν μπορούμε να χρησιμοποιήσουμε απευθείας το περιεχόμενό τους. Για να γίνει αυτό θα πρέπει να αντιγράψουμε το περιεχόμενό τους σε καταχωρητές γενικής χρήσης. Οι εντολές mfhi και mflo αντίστοιχα κάνουν αυτή τη δουλειά (π.χ. mfhi $t3 #$t3=[hi]). Δρ. Παναγιώτης Παπάζογλου / Εργαστήριο Αρχιτεκτονική Υπολογιστών Ι / Σελίδα 6

li Σύνταξη Φόρτωση ακέραιας τιμής σε καταχωρητή li k,v Παράδειγμα k = καταχωρητής (όνομα καταχωρητή) v = ακέραια τιμή Η ακέραια τιμή v φορτώνεται στον καταχωρητή k (εκχώρηση τιμής). Το προηγούμενο περιεχόμενο του καταχωρητή k χάνεται (αντικατάσταση με τη νέα τιμή). #Φόρτωση θετικής τιμής li $v0,1 #v0=1 #Φόρτωση αρνητικής τιμής li $t1,-1 #Χρήση σε κλήση συνάρτησης li $v0,4 la $a0,msg.data msg:.asciiz Hello Δρ. Παναγιώτης Παπάζογλου / Εργαστήριο Αρχιτεκτονική Υπολογιστών Ι / Σελίδα 7

Στο παραπάνω παράδειγμα η εντολή li $v0,4 χρησιμοποιείται για τον καθορισμό της συνάρτησης που θα κληθεί μέσω της εντολής. #Λανθασμένη χρήση li $t1,$t2 #Πρέπει να χρησιμοποιηθεί άλλη εντολή για τη #φόρτωση καταχωρητή από καταχωρητή move Σύνταξη Παράδειγμα Φόρτωση καταχωρητή από περιεχόμενο άλλου καταχωρητή move k1,k2 k1 = καταχωρητής προορισμού (όνομα καταχωρητή) k2 = καταχωρητής προέλευσης (όνομα καταχωρητή) Το περιεχόμενο του καταχωρητή k2 αντιγράφεται στον καταχωρητή k1. Έτσι, μετά την εκτέλεση της εντολής οι δύο καταχωρητές θα έχουν το ίδιο περιεχόμενο. #Φόρτωση move $t1,$v0 #$t1=$v0 #Χρήση σε κλήση συνάρτησης li $v0,1 move $a0,$t1 Δρ. Παναγιώτης Παπάζογλου / Εργαστήριο Αρχιτεκτονική Υπολογιστών Ι / Σελίδα 8

Στο παραπάνω παράδειγμα η εντολή move $a0,$t1 χρησιμοποιείται για να τοποθετηθεί το περιεχόμενο του $t1 στον καταχωρητή $a0 προκειμένου να είναι δυνατή η εμφάνιση του $t1 στην οθόνη μέσω της συνάρτησης 1. la Σύνταξη Φόρτωση διεύθυνσης σε καταχωρητή la k, label k = καταχωρητής (όνομα καταχωρητή) label = συμβολική διεύθυνση (ετικέτα) Η πραγματική διεύθυνση που αντιστοιχεί στην ετικέτα label φορτώνεται στον καταχωρητή k. Οι ετικέτες αποτελούν χρήσιμα εργαλεία προκειμένου ο προγραμματιστής να οριοθετεί συγκεκριμένα σημεία στο πρόγραμμα. Το πρόγραμμα για να τρέξει απαιτεί τις πραγματικές διευθύνσεις που αντιστοιχούν στις ετικέτες. Η εντολή la μετατρέπει τις ετικέτες σε πραγματικές διευθύνσεις τις οποίες φορτώνει στο συγκεκριμένο καταχωρητή. Παράδειγμα #Φόρτωση διεύθυνσης la $t1, panayotis #$t1=διεύθυνση που αντιστοιχεί η ετικέτα #panayotis Δρ. Παναγιώτης Παπάζογλου / Εργαστήριο Αρχιτεκτονική Υπολογιστών Ι / Σελίδα 9

#Χρήση σε κλήση συνάρτησης li $v0,4 la $a0,panayotis.data panayotis:.asciiz Hello Στο παραπάνω παράδειγμα η εντολή la $a0,panayotis χρησιμοποιείται για να πληροφορήσει τη συνάρτηση εμφάνισης αλφαριθμητικού για τη διεύθυνση που ξεκινά το αλφαριθμητικό (μήνυμα). lb Σύνταξη Φόρτωση ενός byte από τη μνήμη σε καταχωρητή lb k, addr k = καταχωρητής (όνομα καταχωρητή) addr = διεύθυνση μνήμης (συμβολική ή απόλυτη) Το περιεχόμενο της θέσης (1 byte) που αντιστοιχεί η διεύθυνση addr φορτώνεται στον καταχωρητή k. Ο καθορισμός της διεύθυνσης μπορεί να γίνει με συνδυασμό ετικέτας και καταχωρητή ή με χρήση του κατάλληλου δεκαεξαδικού αριθμού. Στην πρώτη περίπτωση το περιεχόμενο του καταχωρητή προστίθεται με τη διεύθυνση που αντιστοιχεί η ετικέτα προκειμένου να προσδιοριστεί η θέση της πληροφορίας. Στη δεύτερη περίπτωση γίνεται απευθείας χρήση της πραγματικής διεύθυνσης. Δρ. Παναγιώτης Παπάζογλου / Εργαστήριο Αρχιτεκτονική Υπολογιστών Ι / Σελίδα 10

Παράδειγμα #Φόρτωση byte απευθείας από διεύθυνση lb $t1, 0x10000000 #$t1=[0x10000000] #Χρήση σε διάβασμα πίνακα lb $t1,pinakasa($s0).data pinakasa:.space 10 Στο παραπάνω παράδειγμα η εντολή lb $t1,pinakasa($s0) φορτώνει το byte που βρίσκεται στη διεύθυνση pinakasa+($s0). Έτσι, αν η ετικέτα pinakasa αντιστοιχεί στην αρχική διεύθυνση του πίνακα, ο καταχωρητής $s0 χρησιμοποιείται ως απόκλιση από αυτή τη θέση. lh Σύνταξη Φόρτωση δύο byte (μισή λέξη) από τη μνήμη σε καταχωρητή lh k, addr k = καταχωρητής (όνομα καταχωρητή) addr = διεύθυνση μνήμης (συμβολική ή απόλυτη) Δρ. Παναγιώτης Παπάζογλου / Εργαστήριο Αρχιτεκτονική Υπολογιστών Ι / Σελίδα 11

Το περιεχόμενο δύο θέσεων μνήμης (2 byte) που ξεκινούν στη διεύθυνση addr φορτώνονται στον καταχωρητή k. Ο καθορισμός της διεύθυνσης μπορεί να γίνει με συνδυασμό ετικέτας και καταχωρητή ή με χρήση του κατάλληλου δεκαεξαδικού αριθμού. Στην πρώτη περίπτωση το περιεχόμενο του καταχωρητή προστίθεται με τη διεύθυνση που αντιστοιχεί η ετικέτα προκειμένου να προσδιοριστεί η αρχική θέση της πληροφορίας. Στη δεύτερη περίπτωση γίνεται χρήση απευθείας της πραγματικής διεύθυνσης. Παράδειγμα #Φόρτωση δύο byte απευθείας από διεύθυνση lh $t1, 0x10000000 #$t1=[0x10000000], [0x10000001] #Χρήση σε διάβασμα πίνακα lh $t1,pinakasa($s0).data pinakasa:.space 10 Στο παραπάνω παράδειγμα η εντολή lh $t1,pinakasa($s0) φορτώνει τα δύο byte ξεκινώντας από τη διεύθυνση pinakasa+($s0). Έτσι, αν η ετικέτα pinakasa αντιστοιχεί στην αρχική διεύθυνση του πίνακα, τα δεδομένα διαβάζονται από τις διευθύνσεις pinakasa+($s0) και pinakasa+($s0)+1 αντίστοιχα. lw Φόρτωση τεσσάρων byte (λέξη) από τη μνήμη σε καταχωρητή Δρ. Παναγιώτης Παπάζογλου / Εργαστήριο Αρχιτεκτονική Υπολογιστών Ι / Σελίδα 12

Σύνταξη lw k, addr k = καταχωρητής (όνομα καταχωρητή) addr = διεύθυνση μνήμης (συμβολική ή απόλυτη) Το περιεχόμενο τεσσάρων θέσεων μνήμης (4 byte) που ξεκινούν στη διεύθυνση addr φορτώνονται στον καταχωρητή k. Ο καθορισμός της διεύθυνσης μπορεί να γίνει με συνδυασμό ετικέτας και καταχωρητή ή με χρήση του κατάλληλου δεκαεξαδικού αριθμού. Στην πρώτη περίπτωση το περιεχόμενο του καταχωρητή προστίθεται με τη διεύθυνση που αντιστοιχεί η ετικέτα προκειμένου να προσδιοριστεί η αρχική θέση της πληροφορίας. Στη δεύτερη περίπτωση γίνεται χρήση απευθείας της πραγματικής διεύθυνσης. Παράδειγμα #Φόρτωση ξεκινώντας από συγκεκριμένη διεύθυνση lw $t1, 0x10000000 # 0x10000000 έως 0x10000003 #Χρήση σε διάβασμα πίνακα lw $t1,pinakasa($s0).data pinakasa:.space 10 Στο παραπάνω παράδειγμα η εντολή lw $t1,pinakasa($s0) φορτώνει τα τέσσερα byte ξεκινώντας από τη διεύθυνση pinakasa+($s0). Έτσι, αν η ετικέτα pinakasa αντιστοιχεί στην αρχική διεύθυνση του πίνακα, τα δεδομένα διαβάζονται από τις διευθύνσεις pinakasa+($s0), pinakasa+ ($s0)+1, pinakasa+($s0)+2, και pinakasa+($s0)+3 αντίστοιχα. Δρ. Παναγιώτης Παπάζογλου / Εργαστήριο Αρχιτεκτονική Υπολογιστών Ι / Σελίδα 13

sw Σύνταξη Αποθήκευση τεσσάρων byte (λέξη) από καταχωρητή στη μνήμη sw k, addr k = καταχωρητής (όνομα καταχωρητή) addr = διεύθυνση μνήμης (συμβολική ή απόλυτη) Ολόκληρο το περιεχόμενο του καταχωρητή k αποθηκεύεται στη μνήμη ξεκινώντας από τη διεύθυνση addr. Ο καθορισμός της διεύθυνσης μπορεί να γίνει με συνδυασμό ετικέτας και καταχωρητή ή με χρήση του κατάλληλου δεκαεξαδικού αριθμού. Στην πρώτη περίπτωση το περιεχόμενο του καταχωρητή προστίθεται με τη διεύθυνση που αντιστοιχεί η ετικέτα προκειμένου να προσδιοριστεί η αρχική θέση της πληροφορίας. Στη δεύτερη περίπτωση γίνεται χρήση απευθείας της πραγματικής διεύθυνσης. Παράδειγμα #Αποθήκευση καταχωρητή στη μνήμη sw $t1, 0x10000000 #αρχική διεύθυνση #Χρήση σε γέμισμα πίνακα sw $t1,pinakasa($s0).data pinakasa:.space 10 Δρ. Παναγιώτης Παπάζογλου / Εργαστήριο Αρχιτεκτονική Υπολογιστών Ι / Σελίδα 14

Στο παραπάνω παράδειγμα η εντολή sw $t1,pinakasa($s0) αποθηκεύει το περιεχόμενο του καταχωρητή $t1 ξεκινώντας από τη διεύθυνση pinakasa+($s0). Έτσι, αν η ετικέτα pinakasa αντιστοιχεί στην αρχική διεύθυνση του πίνακα, τα δεδομένα αποθηκεύονται στις διευθύνσεις pinakasa+ ($s0), pinakasa+($s0)+1, pinakasa+($s0)+2, και pinakasa+ ($s0)+3 αντίστοιχα. Εμφάνιση ακέραιου αριθμού (Συνάρτηση 1) Εμφάνιση ακέραιου αριθμού στην οθόνη Προαπαιτούμενα Ο αριθμός της συνάρτησης πρέπει να φορτωθεί στον καταχωρητή $v0 ενώ ο αριθμός που πρόκειται να εμφανιστεί στον καταχωρητή $a0. Έξοδος Ο αριθμός εμφανίζεται στην οθόνη Σύνταξη (για κλήση συνάρτησης) li $v0,1 move $a0,k # ή άλλη εντολή φόρτωσης με προορισμό τον καταχωρητή #$a0 k = καταχωρητής (όνομα καταχωρητή) Δρ. Παναγιώτης Παπάζογλου / Εργαστήριο Αρχιτεκτονική Υπολογιστών Ι / Σελίδα 15

Η συνάρτηση εμφανίζει στην οθόνη τον ακέραιο αριθμό που περιέχει ο καταχωρητής $a0. Ανάλογα την προέλευση της τιμής που πρόκειται να εμφανιστεί θα πρέπει να χρησιμοποιηθεί η κατάλληλη εντολής φόρτωσης. Χαρακτηριστικά είναι τα παραδείγματα που ακολουθούν. #Εμφάνιση περιεχομένου του καταχωρητή $t1 li $v0,1 move $a0,$t1 #Εμφάνιση του αριθμού 14 li $v0,1 li $a0,14 #Εμφάνιση της διεύθυνσης που ξεκινά το μήνυμα με την ετικέτα mes1 li $v0,1 la $a0,mes1 Διάβασμα ακέραιου αριθμού (Συνάρτηση 5) Διάβασμα ακέραιου αριθμού από το πληκτρολόγιο Προαπαιτούμενα Ο αριθμός της συνάρτησης πρέπει να φορτωθεί στον καταχωρητή $v0 Δρ. Παναγιώτης Παπάζογλου / Εργαστήριο Αρχιτεκτονική Υπολογιστών Ι / Σελίδα 16

Έξοδος Ο αριθμός που διαβάστηκε αποθηκεύεται αυτόματα στον καταχωρητή $v0 Σύνταξη (για κλήση συνάρτησης) li $v0,5 Η συνάρτηση διαβάζει τον ακέραιο αριθμό που εισάγει ο χρήστης και τον αποθηκεύει αυτόματα στον καταχωρητή $v0. Σε περίπτωση που πρόκειται μετά την κλήση της συνάρτησης να χρησιμοποιηθεί αμέσως ξανά ο καταχωρητής $v0 θα πρέπει να φροντίσουμε ώστε να αποθηκεύσουμε προσωρινά το περιεχόμενό του σε κάποιο άλλο καταχωρητή. Έτσι, η κλήση της συνάρτησης με την προσωρινή αποθήκευση του ακέραιου αριθμού θα γίνει ως εξής: li $v0,5 move $t1,$v0 Παράδειγμα li $v0,5 move $t1,$v0 li $v0,5 move $t2,$v0 Στο παραπάνω παράδειγμα γίνεται ανάγνωση δύο αριθμών από το πληκτρολόγιο με αντίστοιχη αποθήκευση στους καταχωρητές $t1 και $t2. Δρ. Παναγιώτης Παπάζογλου / Εργαστήριο Αρχιτεκτονική Υπολογιστών Ι / Σελίδα 17

Εμφάνιση αλφαριθμητικού (Συνάρτηση 4) Εμφάνιση μηνύματος στην οθόνη Προαπαιτούμενα Ο αριθμός της συνάρτησης πρέπει να φορτωθεί στον καταχωρητή $v0 και η αρχική διεύθυνση του μηνύματος (ετικέτα) στον καταχωρητή $a0. Έξοδος Εμφάνιση μηνύματος στην οθόνη Σύνταξη (για κλήση συνάρτησης) li $v0,4 la $a0,mes1 Η συνάρτηση εμφανίζει επιλεγμένο μήνυμα στην οθόνη. Το μήνυμα θα πρέπει να έχει δηλωθεί στην περιοχή data. Η δήλωση του μηνύματος συνοδεύεται από συμβολική ετικέτα η οποία χρησιμοποιείται από το πρόγραμμα για τον εντοπισμό του. Κατά την εκτέλεση του προγράμματος η ετικέτα μετατρέπεται σε πραγματική διεύθυνση. Παράδειγμα li $v0,4 la $a0,mes1 Δρ. Παναγιώτης Παπάζογλου / Εργαστήριο Αρχιτεκτονική Υπολογιστών Ι / Σελίδα 18

li $v0,4 la $a0,mes2.data mes1:.asciiz HELLO-1\n mes2:.asciiz HELLO-2 Το παραπάνω παράδειγμα εμφανίζει στην οθόνη τα μηνύματα HELLO-1 και HELLO-2 σε διαφορετικές γραμμές. Διάβασμα αλφαριθμητικού (Συνάρτηση 8) Διάβασμα αλφαριθμητικού από το πληκτρολόγιο Προαπαιτούμενα Ο αριθμός της συνάρτησης πρέπει να φορτωθεί στον καταχωρητή $v0, η αρχική διεύθυνση στην οποία θα αποθηκευτεί το αλφαριθμητικό στον καταχωρητή $a0 και στον $a1 το μήκος του αλφαριθμητικού (μαζί με το χαρακτήρα τερματισμού). Έξοδος - Σύνταξη (για κλήση συνάρτησης) li $v0,8 la $a0,abuffer li $a1,11 Δρ. Παναγιώτης Παπάζογλου / Εργαστήριο Αρχιτεκτονική Υπολογιστών Ι / Σελίδα 19

.data abuffer:.space 11 Το παραπάνω πρόγραμμα διαβάζει από το πληκτρολόγιο ένα αλφαριθμητικό μήκους 10 χαρακτήρων (+1 ένας για το χαρακτήρα τερματισμού) και το αποθηκεύει σε περιοχή μνήμης που ξεκινά από τη διεύθυνση abuffer. Τερματισμός προγράμματος (Συνάρτηση 10) Τερματισμός προγράμματος (έξοδος) Προαπαιτούμενα Έξοδος - Ο αριθμός της συνάρτησης απλά φορτώνεται στον καταχωρητή $v0. Σύνταξη (για κλήση συνάρτησης) li $v0,10 Δρ. Παναγιώτης Παπάζογλου / Εργαστήριο Αρχιτεκτονική Υπολογιστών Ι / Σελίδα 20

ΠΑΡΑΡΤΗΜΑ Συνοπτικός οδηγός assembly Δρ. Παναγιώτης Παπάζογλου / Εργαστήριο Αρχιτεκτονική Υπολογιστών Ι / Σελίδα 21

Συναρτήσεις Συνάρτηση Κωδικός κλήσης ($v0) Ορίσματα print_int 1 $a0 = ακέραιος print_string 4 $a0 = αλφαριθμητικό read_int 5 read_string 8 $a0 = αρχή περιοχής αποθήκευσης $a1 = μήκος αλφαριθμητικού exit 10 Η κλήση κάθε συνάρτησης προϋποθέτει τη χρήση της εντολής αφού προηγουμένως έχουν τοποθετηθεί τα απαιτούμενα ορίσματα Ντιρεκτίβες Συμβολισμός.ascii str.asciiz str Αποθήκευση αλφαριθμητικού στη μνήμη (χωρίς τον χαρακτήρα τερματισμού) π.χ..ascii Hello Αποθήκευση αλφαριθμητικού στη μνήμη (ακολουθούμενου από τον χαρακτήρα τερματισμού).byte b1,..., bn Αποθήκευση n byte συνεχόμενων στη μνήμη.data.space n.text Οριοθέτηση αρχής τμήματος δεδομένων Δέσμευση n bytes (περιοχή δεδομένων) Οριοθέτηση αρχής τμήματος κώδικα (μπορεί να δηλωθεί ως παράμετρος και η αρχική διεύθυνση του τμήματος) Δρ. Παναγιώτης Παπάζογλου / Εργαστήριο Αρχιτεκτονική Υπολογιστών Ι / Σελίδα 22

Αριθμητικές εντολές add Rdest, Rsrc1, Src2 addi Rdest, Rsrc1, ακέραιος div Rsrc1, Rsrc2 div Rdest, Rsrc1, Src2 mul Rdest, Rsrc1, Src2 mult Rsrc1, Rsrc2 neg Rdest, Rsrc rem Rdest, Rsrc1, Src2 sub Rdest, Rsrc1, Src2 Rdest = Rsrc1 + Src2 Rdest = Rsrc1 + ακέραιος Rsrc1 / Rsrc2, HI=υπόλοιπο, LO=πηλίκο Rdest = Rsrc1 / Src2 (πηλίκο) Rdest = Rsrc1 * Src2 Rsrc1* Rsrc2, LO=χαμηλής τάξης word, HI=υψηλής τάξης word Rdest = - Rsrc Rdest = Rsrc1 / Src2 (υπόλοιπο) Rdest = Rsrc1 - Src2 Src2 = καταχωρητής ή αριθμητική τιμή (16 bit integer). Rdest, Rsrc1 = καταχωρητές Χειρισμός σταθερών li Rdest, ακέραιος Rdest = ακέραιος Δρ. Παναγιώτης Παπάζογλου / Εργαστήριο Αρχιτεκτονική Υπολογιστών Ι / Σελίδα 23

Εντολές σύγκρισης seq Rdest, Rsrc1, Src2 sge Rdest, Rsrc1, Src2 sgt Rdest, Rsrc1, Src2 sle Rdest, Rsrc1, Src2 slt Rdest, Rsrc1, Src2 slti Rdest, Rsrc1, ακέραιος sne Rdest, Rsrc1, Src2 Rdest = 1 αν Rsrc1 ==Src2 και 0 σε άλλη περίπτωση Rdest = 1 αν Rsrc1 >= Src2 και 0 σε άλλη περίπτωση Rdest = 1 αν Rsrc1 > Src2 και 0 σε άλλη περίπτωση Rdest = 1 αν Rsrc1 <= Src2 και 0 σε άλλη περίπτωση Rdest = 1 αν Rsrc1 < Src2 και 0 σε άλλη περίπτωση Rdest = 1 αν Rsrc1 < ακέραιος και 0 σε άλλη περίπτωση Rdest = 1 αν Rsrc1 <> Src2 και 0 σε άλλη περίπτωση Src2 = καταχωρητής ή αριθμητική τιμή (16 bit ακέραιος). Rdest, Rsrc1 = καταχωρητές Εντολές διακλάδωσης b label Διακλάδωση στην εντολή που βρίσκεται στο label (χωρίς συνθήκη) beq Rsrc1, Src2, label Διακλάδωση στην εντολή που βρίσκεται στο label αν Rsrc1 == Src2 beqz Rsrc, label Διακλάδωση στην εντολή που βρίσκεται στο label αν Rsrc == 0 bge Rsrc1, Src2, label Διακλάδωση στην εντολή που βρίσκεται στο label αν Rsrc1 >= Src2 Δρ. Παναγιώτης Παπάζογλου / Εργαστήριο Αρχιτεκτονική Υπολογιστών Ι / Σελίδα 24

bgez Rsrc, label Διακλάδωση στην εντολή που βρίσκεται στο label αν Rsrc >= 0 bgt Rsrc1, Src2, label Διακλάδωση στην εντολή που βρίσκεται στο label αν Rsrc1 > Src2 bgtz Rsrc, label Διακλάδωση στην εντολή που βρίσκεται στο label αν Rsrc > 0 ble Rsrc1, Src2, label Διακλάδωση στην εντολή που βρίσκεται στο label αν Rsrc1 <= Src2 blez Rsrc, label Διακλάδωση στην εντολή που βρίσκεται στο label αν Rsrc <= 0 blt Rsrc1, Src2, label Διακλάδωση στην εντολή που βρίσκεται στο label αν Rsrc1 < Src2 bltz Rsrc, label Διακλάδωση στην εντολή που βρίσκεται στο label αν Rsrc < 0 bne Rsrc1, Src2, label Διακλάδωση στην εντολή που βρίσκεται στο label αν Rsrc1 <> Src2 bnez Rsrc, label j label jr Rsrc jal label Src2=καταχωρητής ή ακέραιος. Rdest, Rsrc1 = καταχωρητές Διακλάδωση στην εντολή που βρίσκεται στο label αν Rsrc <> 0 Άλμα στην εντολή που βρίσκεται το label (χωρίς συνθήκη) Άλμα στην εντολή που βρίσκεται στη διεύθυνση που καθορίζεται από το περιεχόμενο του Rsrc (χωρίς συνθήκη) (jr $31 ή jr $ra για επιστροφή από υποπρόγραμμα που κλήθηκε με την εντολή jal label) Άλμα στην εντολή που βρίσκεται το label (αποθήκευση της διεύθυνσης επιστροφής στον καταχωρητή $31 ή $ra) Δρ. Παναγιώτης Παπάζογλου / Εργαστήριο Αρχιτεκτονική Υπολογιστών Ι / Σελίδα 25

Εντολές φόρτωσης la Rdest, address lw Rdest, address Φόρτωση διεύθυνσης στον καταχωρητή Rdest Φόρτωση της λέξης (32 bit) από τη διεύθυνση address στον καταχωρητή Rdest Εντολές αποθήκευσης sw Rsrc, address Αποθήκευση του περιεχομένου του Rsrc ξεκινώντας από τη διεύθυνση address Εντολές αντιγραφής δεδομένων move Rdest, Rsrc mfhi Rdest mflo Rdest mthi Rdest mtlo Rdest Αντιγραφή των περιεχομένων του Rsrc στο Rdest Αντιγραφή των περιεχομένων του HI στον καταχωρητή Rdest Αντιγραφή των περιεχομένων του LO στον καταχωρητή Rdest Αντιγραφή των περιεχομένων του Rdest στον καταχωρητή HI Αντιγραφή των περιεχομένων του Rdest στον καταχωρητή LO Δρ. Παναγιώτης Παπάζογλου / Εργαστήριο Αρχιτεκτονική Υπολογιστών Ι / Σελίδα 26