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

Σχετικά έγγραφα
Συναρτήσεις-Διαδικασίες

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

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

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

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

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

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

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

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

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

Χρονισμός και Απόδοση Υπολογιστικών Συστημάτων

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

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

Απόδοση Υπολογιστικών Συστημάτων

MIPS functions and procedures

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

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

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

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

Data-Level Parallelism Linking & Loading

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

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

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 Οργάνωση και Σχεδίαση Υπολογιστών. Διάλεξη 3 Εντολές του MIPS (2)

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Μετάφραση ενός Προγράμματος Εξαιρέσεις

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

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

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

ΕΠΛ221: Οργάνωση Υπολογιστών και Συμβολικός Προγραμματισμός. Κεφ. 2 Εντολές: H γλώσσα μηχανής

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

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

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

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

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

Προγραμματισμός Ι. Δυναμική Διαχείριση Μνήμης. Δημήτρης Μιχαήλ. Ακ. Έτος Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο

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

Εντολές: H γλώσσα μηχανής

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

Προγραμματισμός Ι. Δείκτες. Δημήτρης Μιχαήλ. Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο

Στόχοι και αντικείμενο ενότητας. Πέρασμα Πίνακα σε Συνάρτηση (συν.) Πέρασμα Πίνακα σε Συνάρτηση. #8.. Ειδικά Θέματα Αλγορίθμων

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

Παραδείγματα Προγραμματισμού σε Assembly του TRN

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

Εντολές: H γλώσσα μηχανής

Εργαστήριο Αρ. 1. Εισαγωγή στην Αρχιτεκτονική MIPS. Πέτρος Παναγή Σελ. 1

LANGUAGE OF THE MACHINE. TEI Κρήτης, Τμ. ΕΠΠ, Αρχιτεκτονική Υπολογιστών. Οργάνωση Υπολογιστή. Τυπική οργάνωση υπολογιστή

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

Τελική Εξέταση, Απαντήσεις/Λύσεις

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

Διδάσκων: Κωνσταντίνος Κώστα Διαφάνειες: Δημήτρης Ζεϊναλιπούρ

Διάλεξη 06: Συνδεδεμένες Λίστες & Εφαρμογές Στοιβών και Ουρών

Οργάνωση Υπολογιστών ΕΛΛΗΝΙΚΗ ΔΗΜΟΚΡΑΤΙΑ ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΡΗΤΗΣ. Διαλέξεις 6: Κάλεσμα Διαδικασιών, Χρήση και Σώσιμο Καταχωρητών. Μανόλης Γ.Η.

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

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

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

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

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

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Αναφορές Στοίβα και Σωρός Αναφορές-Παράμετροι

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

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Κλάσεις και Αντικείμενα Αναφορές

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

ΔΕΙΚΤΕΣ ΚΑΙ ΔΙΕΥΘΥΝΣΕΙΣ

Προγραμματισμός Η/Υ. Ενότητα 8: Ειδικά Θέματα Αλγορίθμων

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

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

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

Κεφάλαιο 2 Εντολές Η γλώσσα της Μηχανής (Instructions Language of the Computer)

Δείκτες στην C (επανάληψη)

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

ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Η/Υ Ακαδημαϊκό έτος ΤΕΤΡΑΔΙΟ ΕΡΓΑΣΤΗΡΙΟΥ #4

με έμφαση στο MIPS R2000

Ανάπτυξη και Σχεδίαση Λογισμικού

Transcript:

ΗΥ 134 Εισαγωγή στην Οργάνωση και στον Σχεδιασμό Υπολογιστών Ι Διάλεξη 5 Διαδικασίες ΙI Νίκος Μπέλλας Τμήμα Μηχανικών Η/Υ, Τηλεπικοινωνιών και Δικτύων Εισαγωγή στους Η/Υ (ΗΥ134) 1

Κατανομή μνήμης Κείμενο (Text): κώδικας Στατικά δεδομένα (static data segment): καθολικές μεταβλητές πχ., στατικές μεταβλητές C, πίνακες, συμβολοσειρές $gp : επιτρέπει εύκολη πρόσβαση στο τμήμα Δυναμικά δεδομένα: σωρός ( heap ) π.χ., malloc στη C, new στη Java Τοπικές ματαβλητές: Στοίβα (Stack) Εισαγωγή στην Οργάνωση και Σχεδίαση Η/Υ 1 2

Παράδειγμα: Διαδικασία-φύλλο (Leaf procedure) int leaf_ex (int g, int h, int i, int j) { int f; f = (g + h) - (i + j); return f; } Διαδικασίες που δεν καλούν άλλες O caller πριν καλέσει την leaf_ex θέτει: $a0=g, $a1=h, $a2=i, $a3=j O $s0 χρειάζεται στον caller και άρα πρέπει να σωθεί callee στην στοίβα από τον Αποτέλεσμα γράφεται στον $v0 Εισαγωγή στην Οργάνωση και Σχεδίαση Η/Υ 1 3

Διαδικασίες-φύλλα κώδικας MIPS: leaf_ex: addi $sp, $sp, -4 sw $s0, 0($sp) add $t0, $a0, $a1 add $t1, $a2, $a3 sub $s0, $t0, $t1 move $v0, $s0 lw $s0, 0($sp) addi $sp, $sp, 4 jr $ra int leaf_ex (int g, int h, int i, int j) { int f; f = (g + h) - (i + j); return f; } Αποθήκευση $s0 στη στοίβα Σώμα διαδικασίας Αποτέλεσμα Επαναφορά $s0 Επιστροφή Εισαγωγή στην Οργάνωση και Σχεδίαση Η/Υ 1 4

Κώδικας C Παράδειγμα strcpy void strcpy (char x[], char y[]) { int i; i = 0; while ((x[i]=y[i])!='\0') i += 1; } Διευθύνσεις των x, y στους $a0, $a1 Το i στον $s0 Εισαγωγή στην Οργάνωση και Σχεδίαση Η/Υ 1 5

Κώδικας MIPS: ( assembly ) Παράδειγμα strcpy: addi $sp, $sp, -4 # ρύθμιση στοίβας για 1 τιμή sw $s0, 0($sp) # αποθήκευση $s0 add $s0, $zero, $zero # i = 0 L1: add $t1, $s0, $a1 # διευθ. του y[i] στον $t1 lb $t2, 0($t1) # $t2 = y[i] add $t3, $s0, $a0 # διευθ. του x[i] στον $t3 sb $t2, 0($t3) # x[i] = y[i] beq $t2, $zero, L2 # εξοδος αν y[i] == 0 addi $s0, $s0, 1 # i = i + 1 j L1 # επόμενη επανάληψη L2: lw $s0, 0($sp) # επαναφορά $s0 addi $sp, $sp, 4 # αφαίρ. τιμής από στοίβα jr $ra # και επιστροφή Εισαγωγή στην Οργάνωση και Σχεδίαση Η/Υ 1 6

Ένθετες διαδικασίες Διαδικασίες που καλούν άλλες διαδικασίες Ή και τον εαυτόν τους (recursive procedures) Ο καλών πρέπει να αποθηκεύσει στη στοίβα: ( address Τη διεύθυνση επιστροφής (return Όσες προσωρινές τιμές και παραμέτρους θα χρειαστούν μετά το τέλος της κλήσης. Μετά την ολοκλήρωση της κλήσης, ο καλών επαναφέρει από τη στοίβα τις αποθηκευμένες τιμές Εισαγωγή στους Η/Υ (ΗΥ134) 7

Bubble Sort Input: Πίνακας από Ν στοιχεία 3 4 10 5 3 Output: Ταξινομημένος πίνακας από Ν στοιχεία 3 3 4 5 10 Βασική ιδέα: Τοποθέτησε το εκάστοτε μικρότερο στοιχείο στην αρχή του πίνακα Εισαγωγή στους Η/Υ (ΗΥ134) 8

Bubble Sort 3 4 10 5 3 3 4 10 3 5 3 3 4 10 5 3 3 4 5 10 3 4 3 10 5 3 3 4 10 5 3 3 4 5 10 3 3 4 5 10 3 3 4 10 5 Εισαγωγή στους Η/Υ (ΗΥ134) 9

Παράδειγμα : Bubble Sort Ο παρακάτω αλγόριθμος, τοποθετεί το μικρότερο στοιχείο του υπο-πίνακα κάθε φορά στην αρχή. void sort(int v[], int n) { int i, j; for (i = 0; i < n; i++) { for (j = n-2; j >= i && v[j] > v[j+1]; j--) { swap(v, j); } } $a0 = &v[0], $a1 = n Εισαγωγή στους Η/Υ (ΗΥ134) 10

void swap(int v[],int k) { int temp; Η διαδικασία swap } temp = v[k]; v[k] = v[k+1]; v[k+1] = temp; swap: sll $t1, $a1, 2 # $t1 = k * 4 ( v+(k*4 add $t1, $a0, $t1 # $t1 = # ([ v[k (διεύθυνση του lw $t0, 0($t1) # $t0 (temp) = v[k] lw $t2, 4($t1) # $t2 = v[k+1] sw $t2, 0($t1) ([ v[k+1 ) # v[k] = $t2 sw $t0, 4($t1) ( temp ) # v[k+1] = $t0 jr $ra # επιστροφή στον καλώντα Εισαγωγή στους Η/Υ (ΗΥ134) 11

Το σώμα της sort $a0 = &v[0], $a1 = n, $s0=i, $s1=j void sort(int v[], int n) { int i, j; for (i = 0; i < n; i++) { swap(v, j); move $s2, $a0 # αποθ. τον $a0 στον $s2 move $s3, $a1 # αποθ. $a1 στον $s3 move $s0, $zero # i = 0 for1tst: bge $s0, $s3, exit1 ( n # go to exit1 if $s0 $s3 (i addi $s1, $a1, 2 # j = n-2 for2tst: blt $s1, $s0, exit2 ( i # go to exit2 if $s1 < $s0 (j < sll $t1, $s1, 2 # $t1 = j * 4 add $t2, $s2, $t1 ( 4 * (j # $t2 = v + lw $t3, 0($t2) # $t3 = v[j] lw $t4, 4($t2) # $t4 = v[j + 1] bge $t4, $t3, exit2 # go to exit2 if $t4 $t3 move $a0, $s2 # 1η παράμ. της swap είναι v move $a1, $s1 # 2η παράμ. της swap είναι j jal swap # κλήση διαδικασίας swap addi $s1, $s1, 1 # j = 1 j for2tst # προς έλεγχο εσωτερικού βρόχου exit2: addi $s0, $s0, 1 # i += 1 j for1tst # jump to test of outer loop } for (j = n-2; j >= i && v[j] > v[j+1]; j } Move params Outer loop Inner loop Pass params & call Inner loop Outer loop 12

Ολόκληρη η διαδικασία sort: addi $sp,$sp, 20 # κάνε χώρο στη στοίβα για 5 κατ/τές sw $ra, 16($sp) # αποθ. $ra στη στοίβα sw $s3,12($sp) # αποθ. $s3 στη στοίβα sw $s2, 8($sp) # αποθ. $s2 στη στοίβα sw $s1, 4($sp) # αποθ. $s1 στη στοίβα sw $s0, 0($sp) # αποθ. $s0 στη στοίβα # σώμα διαδικασίας exit1: lw $s0, 0($sp) # επαναφορά $s0 από στοίβα lw $s1, 4($sp) # επαναφορά $s1 από στοίβα lw $s2, 8($sp) # επαναφορά $s2 από στοίβα lw $s3,12($sp) # επαναφορά $s3 από στοίβα lw $ra,16($sp) # επαναφορά $ra από στοίβα addi $sp,$sp, 20 # επαναφορά stack pointer jr $ra # επιστροφή στον καλώντα Εισαγωγή στους Η/Υ (ΗΥ134) 13

Πίνακες ή Δείκτες? Η διευθυνσιοδότηση με αριθμοδείκτες απαιτεί: Πολ/σμό του αριθμοδείκτη με το μέγεθος των στοιχείων Πρόσθεση στη διεύθυνση της αρχής του πίνακα. Οι δείκτες αντιστοιχούν απευθείας σε διευθύνσεις στη μνήμη Αποφεύγουν την πολυπλοκότητα της χρήσης αριθμοδεικτών Εισαγωγή στους Η/Υ (ΗΥ134) 14

Παράδειγμα Συνάρτηση καθαρισμού (clear ) μιάς περιοχής μνήμης clear1(int array[], int size) { int i; ( 1 += i for (i = 0; i < size; array[i] = 0; } clear2(int *array, int size) { int *p; for (p = &array[0]; p < &array[size]; ( 1 + p p = *p = 0; } move $t0,$zero # i = 0 loop1: sll $t1,$t0,2 # $t1 = i * 4 add $t2,$a0,$t1 # $t2 = # &array[i] sw $zero, 0($t2) # array[i] = 0 addi $t0,$t0,1 # i = i + 1 slt $t3,$t0,$a1 # $t3 = ( size (i < # bne $t3,$zero,loop1 # if ( ) # goto loop1 move $t0,$a0 # p = & array[0] sll $t1,$a1,2 # $t1 = size * 4 add $t2,$a0,$t1 # $t2 = # &array[size] loop2: sw $zero,0($t0) # Memory[p] = 0 addi $t0,$t0,4 # p = p + 4 slt $t3,$t0,$t2 # $t3 = ([ p<&array[size )# ( ) bne $t3,$zero,loop2 # if Αριθμός εντολών που εκτελούνται, clear1: 6N+1, clear2: 4N+3 # goto loop2 Εισαγωγή στους Η/Υ (ΗΥ134) 15

Count Number of Zeros Να γραφεί πρόγραμμα σε MIPS assembly το να επιστρέφει τον αριθμό των 1 στην δυαδική αναπαράσταση ενός απρόσημου ακέραιου αριθμού. Για παράδειγμα, εάν η είσοδος στο πρόγραμμα είναι ο δεκαδικός αριθμός 201, πού έχει δυαδική αναπαράσταση (11001001) 2, το πρόγραμμα σας θα πρέπει να τυπώνει το 4. Η είσοδος θα πρέπει να γίνεται από την κονσόλα και ο αριθμός να τυπώνεται στην κονσόλα. Το πρόγραμμα σας δεν θα πρέπει να χρησιμοποιεί επιπλέον μνήμη. Εισαγωγή στους Η/Υ (ΗΥ134) 16

Count Number of Zeros.text.globl main main: li $v0, 5 # read integer number syscall move $a0, $v0 jal count_ones # call the function # move $a0, $v0 # print output li $v0, 1 syscall li $v0, 10 # and exit syscall # function to count number of ones of # input number N (in $a0) count_ones: addi $sp, $sp, -4 # stack logistics sw $s0, 0($sp) move $s0, $a0 li $v0, 0 L1: beqz $s0, Exit andi $t1, $s0, 0x1 # check the last bit beqz $t1, L2 # if 0, jump tou L2 addi $v0, $v0, 1 # add 1 to the counter L2: srl $s0, $s0, 1 # right shift by 1 j L1 Exit: lw $s0, 0($sp) addi $sp, $sp, 4 jr $ra # stack logistics Εισαγωγή στους Η/Υ (ΗΥ134) 17

Byte swapping Έστω ότι ο καταχωρητής $t0 περιέχει αρχικά μια 32-bit τιμή 0ΧAABBCCDD. Να γράψετε κώδικα MIPS assembly που να αντιστρέφει την τιμή του $t0 σε 0XDDCCBBAA. Ο κώδικας δεν θα πρέπει να περιέχει πάνω από 15 εντολές assembly και δεν θα πρέπει να χρησιμοποιήσετε την καθόλου την μνήμη στο πρόγραμμα σας (δηλ. εντολές τύπου lw και sw). Εισαγωγή στους Η/Υ (ΗΥ134) 18

Byte swapping # We need to re-arrange the bytes in the word. li $t1, 0 andi $t2, $t0, 0xFF000000 # $t0 has AA BB CC DD srl $t1, $t2, 24 # and final result andi $t2, $t0, 0x00FF0000 srl $t2, $t2, 8 or $t1, $t2, $t1 andi $t2, $t0, 0x0000FF00 sll $t2, $t2, 8 or $t1, $t2, $t1 andi $t2, $t0, 0x000000FF sll $t2, $t2, 24 or $t0, $t2, $t1 Εισαγωγή στους Η/Υ (ΗΥ134) 19

Reverse A String Η συνάρτηση void reverse(char *s) αντιστρέφει την σειρά των χαρακτήρων του null-terminated string s. Για παράδειγμα, εάν πριν την κλήση της συνάρτησης, s= abcde, τότε μετά την κλήση της συνάρτησης, s= edcba. Εισαγωγή στην Οργάνωση και Σχεδίαση Η/Υ 1 20

Reverse A String reverse: addi $sp, $sp, -12 sw $ra, 8($sp) sw $s0, 4($sp) sw $s1, 0($sp) move $s0, $a0 move $s1, $a0 # compute length of string in $v0 jal strlen addi $t0, $v0, -1 # $s1 points at the end of the string add $s1, $s1, $t0 L3: bge $s0, $s1, Exit lb $t0, 0($s0) #swap lb $t1, 0($s1) sb $t0, 0($s1) sb $t1, 0($s0) addi $s0, $s0, 1 addi $s1, $s1, -1 j L3 Exit: Εισαγωγή στην Οργάνωση και Σχεδίαση Η/Υ 1 move $v0, $a0 lw $ra, 8($sp) lw $s0, 4($sp) lw $s1, 0($sp) addi $sp, $sp, 12 jr $ra # Compute the length of a null-terminated string (the null char is not included) strlen: addi $sp, $sp, -4 sw $s1, 0($sp) move $s1, $a0 move $t0, $zero L1: lb $t1, 0($s1) beq $t1, $zero, L2 addi $s1, $s1, 1 addi $t0, $t0, 1 j L1 L2: move $v0, $t0 lw $s1, 0($sp) addi $sp, $sp, 4 jr $ra 21