-Επεξεργαστής: datapath (δίοδος δεδομένων) (1) και control (2) -Μνήμη (3) -Συσκευές Εισόδου (4), Εξόδου (5) (Μεγάλη ποικιλία!!)

Σχετικά έγγραφα
-Επεξεργαστής: datapath (δίοδος δεδοµένων) (1) και control (2) -Μνήµη (3) -Συσκευές Εισόδου (4), Εξόδου (5) (Μεγάλη ποικιλία!!)

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

-Επεξεργαστής: datapath (δίοδος δεδομένων) (1) και control (2) -Μνήμη (3) -Συσκευές Εισόδου (4), Εξόδου (5) (Μεγάλη ποικιλία!!)

-Επεξεργαστής: datapath (δίοδος δεδομένων) (1) και control (2) -Μνήμη (3) -Συσκευές Εισόδου (4), Εξόδου (5) (Μεγάλη ποικιλία!!)

Περιγραφή αρχιτεκτονικής MIPS MIPS assembly (1o και 2o μέρος)

Αρχιτεκτονικές Συνόλου Εντολών

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

Αρχιτεκτονικές Συνόλου Εντολών

Αρχιτεκτονικές Συνόλου Εντολών

Αρχιτεκτονικές Συνόλου Εντολών

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

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

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

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

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

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

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

O επεξεργαστής: Η δίοδος δεδομένων (datapath) και η μονάδα ελέγχου (control)

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

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

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

O επεξεργαστής: Η δίοδος δεδομένων (datapath) και η μονάδα ελέγχου (control)

και η µονάδα ελέγχου (control) O επεξεργαστής: Η δίοδος δεδοµένων (datapath) Εντολές διακλάδωσης (branch beq, bne) I Type Σχεδίαση datapath

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

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

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

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

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

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

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

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

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

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

Single Cycle Datapath. Αρχιτεκτονική Υπολογιστών. 5ο εξάμηνο ΣΗΜΜΥ ακ. έτος: Νεκ. Κοζύρης

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

Τέτοιες λειτουργίες γίνονται διαμέσου του

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

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

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

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

ΠΛΕ- 074 Αρχιτεκτονική Υπολογιστών 2

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

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

MIPS functions and procedures

Προχωρηµένα Θέµατα Αρχιτεκτονικής

Κεφάλαιο 3. Αριθμητική Υπολογιστών Review. Hardware implementation of simple ALU Multiply/Divide Real Numbers

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

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

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;

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

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

; Γιατί είναι ταχύτερη η λήψη και αποκωδικοποίηση των εντολών σταθερού μήκους;

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

Η διασύνδεση Υλικού και λογισμικού David A. Patterson και John L. Hennessy. Chapter 5. Ο επεξεργαστής: διαδρομή δεδομένων και μονάδα ελέγχου

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

Αρχιτεκτονικές Συνόλου Εντολών (ΙΙ)

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

ΗΥ 232 Οργάνωση και Σχεδίαση Υπολογιστών. Intel x86 ISA. Νίκος Μπέλλας Τμήμα Ηλεκτρολόγων Μηχανικών και Μηχανικών ΗΥ

Επεξεργαστής Υλοποίηση ενός κύκλου μηχανής

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

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

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

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

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

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

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

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

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

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

Επεξεργαστής Υλοποίηση ενός κύκλου μηχανής

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

Αρχιτεκτονικζσ Συνόλου Εντολϊν

Απλός επεξεργαστής (Επανάληψη)

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

Εργαστήριο Αρ. 1. Εισαγωγή στην Αρχιτεκτονική MIPS. Πώς Δημιουργείτε ένα Executable Αρχείο

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

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

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

Θέµατα Φεβρουαρίου

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

Αρχιτεκτονικη υπολογιστων

Αρχιτεκτονικές Συνόλου Εντολών

Data-Level Parallelism Linking & Loading

ΤΕΧΝΙΚΕΣ ΑΥΞΗΣΗΣ ΤΗΣ ΑΠΟΔΟΣΗΣ ΤΩΝ ΥΠΟΛΟΓΙΣΤΩΝ I

Εργαστήριο Οργάνωσης Η/Υ. Δαδαλιάρης Αντώνιος

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

; Τι περιέχεται στη συσκευασία ενός μικροεπεξεργαστή σήμερα;

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

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

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

Εισαγωγή στην πληροφορική -4

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

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

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

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

Θ. Ζαχαριάδης Αν. Καθηγητής. Λ. Σαράκης Καθ. Εφαρμογών

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

Multi Cycle Datapath. Αρχιτεκτονική Υπολογιστών. 5ο εξάμηνο ΣΗΜΜΥ ακ. έτος: Νεκ. Κοζύρης

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

ΜΥΥ- 402 Αρχιτεκτονική Υπολογιστών ARM και x86

Transcript:

Οργάνωση Υπολογιστών 5 συστατικά στοιχεία -Επεξεργαστής: datapath (δίοδος δεδομένων) (1) και control (2) -Μνήμη (3) -Συσκευές Εισόδου (4), Εξόδου (5) (Μεγάλη ποικιλία!!) Συσκευές γρήγορες π.χ. κάρτες γραφικών, αργές π.χ. πληκτρολόγιο. Για το Ι/Ο έχει γίνει η λιγότερη έρευνα..(i/o busses, I/O switched fabrics ) Ιεραρχία Μνήμης: καταχωρητές, κρυφή μνήμη (L1), κρυφή μνήμη (L2), κύρια Μνήμη- ΠΟΛΥ ΣΗΜΑΝΤΙΚΟ ΣΤΟΙΧΕΙΟ! 7/2/2011 cslab@ntua 2010-2011 1

Αρχιτεκτονικές Συνόλου Εντολών Instruction Set Architectures Instruction Fetch (IF) Instruction Decode (ID) Operand Fetch (OF) Execute (Ex) Result Store (WB) Next Instruction Αριθμός εντολών Μορφή Εντολών: μεταβλητό ή σταθερό μέγεθος bytes για κάθε εντολή; (8086 1-17 bytes, MIPS 4 bytes) Πώς γίνεται η αποκωδικοποίηση (ID); Που βρίσκονται τα ορίσματα (operands) και το αποτέλεσμα: Μνήμη-καταχωρητές, πόσα ορίσματα, τι μεγέθους; Ποια είναι στη μνήμη και ποια όχι; Πόσοι κύκλοι για κάθε εντολή; 7/2/2011 cslab@ntua 2010-2011 2

Κατηγορίες Αρχιτεκτονικών Συνόλου Εντολών (ISA Classes) 1. Αρχιτεκτονικές Συσσωρευτή (accumulator architectures) (μας θυμίζει κάτι?) 2. Αρχιτεκτονικές επεκταμένου συσσωρευτή ή καταχωρητών ειδικού σκοπού (extended accumulator ή special purpose register) 3. Αρχιτεκτονικές Καταχωρητών Γενικού Σκοπού 3α. register-memory 3b. register-register (RISC) 7/2/2011 cslab@ntua 2010-2011 3

Αρχιτεκτονικές Συσσωρευτή (1) 1η γενιά υπολογιστών: h/w ακριβό, μεγάλο μέγεθος καταχωρητή. Ένας καταχωρητής για όλες τις αριθμητικές εντολές (συσσώρευε όλες τις λειτουργίες Συσσωρευτής (Accum) Σύνηθες: 1ο όρισμα είναι ο Αccum,, 2o η μνήμη, μήμη, αποτέλεσμα στον Accum π.χ. add 200 Παράδειγμα: A = B + C Accum = Memory(AddressB); Accum = Accum + Memory(AddressC); Memory(AddressA) = Accum; Load AddressB Add AddressC Store AddressA Όλες οι μεταβλητές αποθηκεύονται στη μνήμη. Δεν υπάρχουν βοηθητικοί καταχωρητές 7/2/2011 cslab@ntua 2010-2011 4

Αρχιτεκτονικές Συσσωρευτή (2) Κατά: Χρειάζονται πολλές εντολές για ένα πρόγραμμα Κάθε φορά πήγαινε-φέρε από τη μνήμη (? Κακό είναι αυτό) Bottleneck o Accum! Υπέρ: Εύκολοι compilers, κατανοητός προγραμματισμός, εύκολη σχεδίαση h/w Λύση; Πρόσθεση καταχωρητών για συγκεκριμένες λειτουργίες (ISAs καταχωρητών ειδικού σκοπού) 7/2/2011 cslab@ntua 2010-2011 5

Αρχιτεκτονικές Επεκταμένου Συσσωρευτή Καταχωρητές ειδικού σκοπού π.χ. δεικτοδότηση, αριθμητικές πράξεις Υπάρχουν εντολές που τα ορίσματα είναι όλα σε καταχωρητές Κατά βάση (π.χ. σε αριθμητικές εντολές) το ένα όρισμα στη μνήμη. 7/2/2011 cslab@ntua 2010-2011 6

Αρχιτεκτονικές Καταχωρητών γενικού σκοπού Register-memory Αφήνουν το ένα όρισμα να είναι στη μνήμη (πχ. 80386) Load R1, B Add R1, C Store A, R1 A=B+C extended-accumulator Register-register register (load store) (1980+) Load R1, B Load R2, C Add R3, R1, R2 Store A, R3 register-register Memory-memory accumulator register-memory 7/2/2011 cslab@ntua 2010-2011 7

Αρχιτεκτονική Στοίβας Καθόλου registers! Stack model ~ 1960!!! Στοίβα που μεταφέρονται τα ορίσματα που αρχικά βρίσκονται στη μνήμη. Καθώς βγαίνουν γίνονται οι πράξεις και το αποτέλεσμα ξαναμπαίνει στη στοίβα. Θυμάστε τα HP calculators με reverse polish notation A=B+C push Address C push AddressB add pop AddressA 7/2/2011 cslab@ntua 2010-2011 8

Εντολές μεταβλητού μήκους: 1-17 bytes 80x86 1-54 bytes VAX, IBM Γιατί?? Ιnstruction Memory ακριβή, οικονομία χώρου!!!! Εμείς στο μάθημα: register-register ISA! (load- store) 1. Οι καταχωρητές είναι γρηγορότεροι από τη μνήμη 2. Μειώνεται η κίνηση με μνήμη 3. Δυνατότητα να υποστηριχθεί σταθερό μήκος εντολών 4. (τα ορίσματα είναι καταχωρητές, άρα ό αριθμός τους (πχ. 1-32 καταχωρητές) όχι δ/νσεις μνήμης Compilers πιο δύσκολοι!!! 7/2/2011 cslab@ntua 2010-2011 9

Βασικές Αρχές Σχεδίασης (patterson-hennessy COD2e) 1. Η ομοιομορφία των λειτουργιών συμβάλλει στην απλότητα του υλικού (Simplicity favors Regularity) 2. Όσο μικρότερο τόσο ταχύτερο! (smaller is faster) 3. H καλή σχεδίαση απαιτεί σημαντικούς συμβιβασμούς (Good design demands good compromises) Γενικότητες? Θα τα δούμε στη συνέχεια... 7/2/2011 cslab@ntua 2010-2011 10

MIPS σύνολο εντολών: Λέξεις των 32 bit (μνήμη οργανωμένη σε bytes, ακολουθεί το μοντέλο big Εndian) 32 καταχωρητές γενικού σκοπού - REGISTER FILE Θα μιλήσουμε για: εντολές αποθήκευσης στη μνήμη (lw, sw) Αριθμητικές εντολές (add, sub κλπ) Εντολές διακλάδωσης (branch instructions) Δεν αφήνουμε τις εντολές να έχουν μεταβλητό πλήθος ορισμάτων- π.χ. add a,b,c πάντα: a=b+c Θυμηθείτε την 1η η αρχή: H ομοιομορφία μ των λειτουργιών συμβάλλει στην απλότητα του h/w 7/2/2011 cslab@ntua 2010-2011 11

Σύνολο Εντολών Instruction Set Λέξεις της γλώσσας του υπολογιστή εντολές Γλώσσες των υπολογιστών όμοιες Στο μάθημα, σύνολο εντολών MIPS 7/2/2011 cslab@ntua 2010-2011 12

Αφού οι καταχωρητές είναι τόσο...«γρήγοροι» γιατί να μην μεγαλώσουμε το μέγεθος του register file? 2η αρχή: Όσο μικρότερο τόσο ταχύτερο! Αν το register file πολύ μεγάλο, πιο πολύπλοκη η αποκωδικοποίηση, πιο μεγάλος ο κύκλος ρολογιού (φάση ID) άρα...υπάρχει ρχ tradeoff Μνήμη οργανωμένη σε bytes: (Κάθε byte και ξεχωριστή δνση) 2 30 λέξεις μνήμης των 32 bit (4 bytes) κάθε μια Memory [0] Memory [4] Memory [8] Memory [12] $s0, $s1, καταχωρητές (μεταβλητές συνήθως) $t0, $t1, καταχωρητές (προσωρινές τιμές) $zero ειδικός καταχωρητής περιέχει το 0 32 bits 32 bits 32 bits 32 bits 7/2/2011 cslab@ntua 2010-2011 13

Big Endian vs Little Endian Big Endian: H δνση του πιο σημαντικού byte (MSB) είναι και δνση της λέξης Little Endian: H δνση του λιγότερο σημαντικού byte (LSB) είναι και δνση της λέξης H λέξη αποθηκεύεται πάντα σε συνεχόμενες θέσεις: δνση, δνση+1,.., δνση+3 3 BIG_ENDIAN A[0] 0 MSB 1 2 3 LSB A[1] 4 MSB 5 6 7 LSB A[2] 8 MSB 9 10 11 LSB 8 bits LITTLE_ENDIANENDIAN A[0] 0 LSB 1 2 3 MSB A[1] 4 LSB 5 6 7 MSB A[2] 8 LSB 9 10 11 MSB 7/2/2011 cslab@ntua 2010-2011 14

MIPS ISA (βασικές εντολές) Αριθμητικές εντολές add, sub: πάντα τρία ορίσματα - ποτέ δνση μνήμης! add $s1, $s2, $s3 # $s1 = $s2+$s3 sub $s1, $s2, $s3 # $s1 = $s2-$s3 Εντολές μεταφοράς δεδομένων (load-store): Εδώ έχουμε αναφορά στη μνήμη (πόσοι τρόποι? Θα το δούμε στη συνέχεια) lw $s1, 100($s2) # $s1 = Memory(100+$s2) (load word) sw $s1, 100($s2) # Memory(100+$s2) = $s1(store word) 7/2/2011 cslab@ntua 2010-2011 15

Λειτουργίες υλικού υπολογιστών Αριθμητικές Πράξεις add a, b, c # a b + c a = b + c + d + e; add a, b, c add a, a, d add a, a, e 3 εντολές για το άθροισμα 4 μεταβλητών 7/2/2011 cslab@ntua 2010-2011 16

Παράδειγμα: Κώδικας σε C a = b + c; d = a e; Λειτουργίες υλικού υπολογιστών Μετάφραση σε κώδικα MIPS add a, b, c sub d, a, e 7/2/2011 cslab@ntua 2010-2011 17

Λειτουργίες υλικού υπολογιστών Παράδειγμα: f = (g + h) (i + j); Τι παράγει ο compiler? add t0, g, h # προσωρινή μεταβλητή t0 add t1, i, j # προσωρινή μεταβλητή t1 sub f, t0, t1 # το f περιέχει το t0 t1 7/2/2011 cslab@ntua 2010-2011 18

Λειτουργίες υλικού υπολογιστών Κατηγορία Εντολή Παράδειγμα Σημασία Σχόλια Αριθμητικές ικές Πράξεις add add a, b, c a = b + c subtract sub a, b, c a = b - c Πάντα 3 τελεστέοι Πάντα 3 τελεστέοι 7/2/2011 cslab@ntua 2010-2011 19

Τελεστέοι Υλικού Υπολογιστών f = (g + h) (i + j); (f,g,h,i,j) ανατίθενται σε ($s0,$s1,$s2,$s3,$s4) $t0, $t1 προσωρινοί καταχωρητές add $t0, $s1, $s2 add $t1, $s3, $s4 sub $s0, $t0, $t1 7/2/2011 cslab@ntua 2010-2011 20

Τελεστέοι Υλικού Υπολογιστών Γλώσσες προγραμματισμού έχουν: απλές μεταβλητές σύνθετες δομές (π.χ. arrays, structs) Πώς τις αναπαριστά ένας υπολογιστής; Πάντα στη μνήμη Εντολές μεταφοράς δεδομένων 7/2/2011 cslab@ntua 2010-2011 21

Εντολές μεταφοράς δεδομένων Π.χ. Διεύθυνση του 3 στοιχείου είναι 2 Τελεστέοι Υλικού Υπολογιστών Τιμή στοιχείου Memory[2] είναι 10 7/2/2011 cslab@ntua 2010-2011 22

Τελεστέοι Υλικού Υπολογιστών Εντολή μεταφοράς δδ δεδομένων από τη μνήμη load καταχωρητής, σταθερά(καταχωρητής) π.χ. lw $t1, 4($s2) φορτώνουμε στον $t1 την τιμή M[$s2+4] 7/2/2011 cslab@ntua 2010-2011 23

Τελεστέοι Υλικού Υπολογιστών Παράδειγμα: Α πίνακας 100 λέξεων (4 bytes η λέξη) g, h ανατίθενται σε $1$2 $s1, $s2 αρχική διεύθυνση του A στον $s3 Μεταγλωττίστε g = h + A[8]; offset base register lw $t0, 32($s3) add $s1, $s2, $t0 7/2/2011 cslab@ntua 2010-2011 24

Μνήμη είναι byte addressable Τελεστέοι Υλικού Υπολογιστών Δύο διαδοχικές λέξεις διαφέρουν κατά 4 alignment restriction (ευθυγράμμιση) λέξεις ξεκινάνε πάντα σε διεύθυνση πολ/σιο του 4 7/2/2011 cslab@ntua 2010-2011 25

Σταθερές: Τελεστέοι Υλικού Υπολογιστών Πρόσθεση της τιμής 4 στον $s3 lw $t0, AddrConstant4($s1) add $s3, $s3, $t0 ή addi $s3, $s3, 4 Make common case FAST 7/2/2011 cslab@ntua 2010-2011 26

Τελεστέοι Υλικού Υπολογιστών Τελεστέοι MIPS 32 καταχωρητές $s0, $s1,... 2 30 θέσεις λέξεων στη μνήμη 2 32 θέσεις byte στη μνήμη 7/2/2011 cslab@ntua 2010-2011 27

Τελεστέοι Υλικού Υπολογιστών Συμβολική γλώσσα MIPS Παραδείγματα add $s1, $s2, $s3 sub $s1, $s2, $s3 addi $s1, $s2, 100 lw $s1, 100($s2) sw $s1,100($s2) 7/2/2011 cslab@ntua 2010-2011 28

Τελεστέοι Υλικού Υπολογιστών Πόσο γρήγορα πληθαίνουν οι καταχωρητές σε έναν επεξεργαστή; 1. Πολύ γρήγορα (Νόμος Moore, 2 ος αριθμός τρανζίστορ/18 μήνες) 2. Πολύ αργά (portable binary code) Π.χ. Θέλουμε τα προγράμματά μας να τρέχουν ρχ και στον Pentium III και στον Pentium IV 7/2/2011 cslab@ntua 2010-2011 29

Αναπαράσταση Εντολών στον Υπολογιστή Δυαδικά ψηφία, Δυαδικό σύστημα (binary) Υλικό υπολογιστών, υψηλή-χαμηλή τάση, κλπ. Kαταχωρητές $s0,..., $s7 αντιστοιχίζονται στους 16 ως 23 $t0,..., $t7 αντιστοιχίζονται στους 8 ως 15 7/2/2011 cslab@ntua 2010-2011 30

Αναπαράσταση Εντολών στον Υπολογιστή Συμβολική αναπαράσταση: add $t0, $s1, $s2 Assembly Πώς την καταλαβαίνει ο MIPS? $s1 $s2 $t0 unused 0 17 18 8 0 32 add Κώδικας μηχανής 000000 10001 10010 01000 00000 10000 6 bit 5 bit 5 bit 5 bit 5 bit 6 bit 7/2/2011 cslab@ntua 2010-2011 31

Μορφή Εντολής - Instruction Format Θυμηθείτε το 1ο κανόνα: Η ομοιομορφία των λειτουργιών συμβάλλει στην απλότητα του υλικού R-Type (register type) op rs rt rd shamt funct 6 bits 5bits 5bits 5bits 5bits 6bits Op: opcode rs,rt: register source operands Rd: register destination operand Shamt: shift amount Funct: op specific (function code) add $rd, $rs, $rt 7/2/2011 cslab@ntua 2010-2011 32

MIPS R Type (ALU) R-Type: Όλες οι εντολές της ALU που χρησιμοποιούν 3 καταχωρητές OP rs rt rd shamt funct 6 bits 5 bits 5 bits 5 bits 5 bits 6 bits Παραδείγματα : add $1,$2,$3$2 $3 and $1,$2,$3$2 $3 sub $1,$2,$3 or $1,$2,$3 Destination register in rd Operand register in rt Operand register in rs 7/2/2011 cslab@ntua 2010-2011 33

Αναπαράσταση Εντολών στον Υπολογιστή op rs rt rd shamt funct 6 bit 5 bit 5 bit 5 bit 5 bit 6 bit Τι γίνεται με τη load? Πώς χωράνε οι τελεστές της στα παραπάνω πεδία? Π.χ. η σταθερά της lw. lw $t1, 8000($s3) σε ποιο πεδίο χωράει; 7/2/2011 cslab@ntua 2010-2011 34

Ερώτηση: Μας αρκεί το R-Type? Τι γίνεται με εντολές που θέλουν ορίσματα διευθύνσεις ή σταθερές? Θυμηθείτε, θέλουμε σταθερό μέγεθος κάθε εντολής (32 bit) Απάντηση: Μάλλον όχι Άρα: H καλή σχεδίαση απαιτεί σημαντικούς συμβιβασμούς (3η αρχή) Ι-Type: op rs rt address_ offset 6 bits 5 bits 5 bits 16 bits lw $rt, address_offset($rs) Τα 3 πρώτα πεδία (op,rs, (p,, rt) έχουν το ίδιο όνομα και μέγεθος μγ όπως και πριν 7/2/2011 cslab@ntua 2010-2011 35

Αναπαράσταση Εντολών στον Υπολογιστή Παράδειγμα: lw $t0, 32($s3) Kαταχωρητές (σκονάκι ) $s0,..., $s7 αντιστοιχίζονται στους 16 ως 23 $t0,..., $t7 αντιστοιχίζονται στους 8 ως 15 I-format op rs rt σταθερά ή διεύθυνση 6 bit 5 bit 5 bit 16 bit xxxxxx 19 8 32 7/2/2011 cslab@ntua 2010-2011 36

Επεξεργαστής Αριθμός καταχωρητών γενικού σκοπού Αρχιτεκτονική EDSAC 1 accumulator 1949 IBM 701 1 accumulator 1953 CDC 6600 8 load-store 1963 IBM 360 16 register-memory 1964 DEC PDP-8 1 accumulator 1965 DEC PDP-11 8 Register-memory 1970 Intel 8008 1 accumulator 1972 Motorola 6800 2 accumulator 1974 DEC VAX 16 register-memory, memory-memory 1977 Intel 8086 8 extended daccumulator 1978 Motorola 68000 16 register-memory 1980 Intel 80386 8 register-memory 1985 MIPS 32 load-store 1985 HP PA-RISC 32 load-store 1986 SPARC 32 load-store 1987 PowerPC 32 load-store 1992 DEC Alpha 32 load-store 1992 Έτος 7/2/2011 cslab@ntua 2010-2011 37

Κανόνες Ονοματοδοσίας και Χρήση των MIPS Registers Εκτός από το συνήθη συμβολισμό των καταχωρητών με $ ακολουθούμενο από τον αριθμό του καταχωρητή, μπορούν επίσης να παρασταθούν και ως εξής : Αρ. Καταχωρητή Όνομα Χρήση Preserved on call? 0 1 2-3 4-7 8-15 $zero $at $v0-$v1 $ $a0-$a3 $t0-$t7 Constant value 0 Reserved for assembler Vl Values for result and expression evaluation Arguments Temporaries n.a. όχι όχι ναι όχι 16-23 24-25 $s0-$s7 $t8-$t9 Saved More temporaries ναι όχι 26-27 $k0-$k1 $ Reserved for operating system ναι 28 29 30 $gp $sp $fp Global pointer Stack pointer Frame pointer ναι ναι ναι 31 $ra Return address ναι 7/2/2011 cslab@ntua 2010-2011 38

MIPS I Type : Load/Store OP rs rt address 6 bits 5 bits 5 bits 16 bits address: 16 bit memory address offset in bytes added to base register. Παραδείγματα : Offset base register in rs source register in rt Store word: sw 500($4), $3 Load word: lw $1, 30($2) Destination register in rt Offset base register in rs 7/2/2011 cslab@ntua 2010-2011 39

MIPS ALU I Type Οι I-Type εντολές της ALU χρησιμοποιούν 2 καταχωρητές και μία σταθερή τιμή I-Type είναι και οι εντολές Loads/stores, conditional branches. OP rs rt immediate 6 bits 5 bits 5 bits 16 bits immediate: Constant second operand for ALU instruction. Παραδείγματα : add immediate: addi $1,$2,100 and immediate andi $1,$2,10 Constant operand Result register in rt in immediate Source operand register in rs 7/2/2011 cslab@ntua 2010-2011 40

MIPS data transfer instructions Παραδείγματα Instruction sw 500($4), $3 sh 502($2), $3 sb 41($3), $2 lw$1 $1, 30($2) lh $1, 40($3) lhu $1, 40($3) lb $1, 40($3) lbu $1, 40($3) Σχόλια Store word Store half Store byte Loadword Load halfword Load halfword unsigned Load byte Load byte unsigned lui $1, 40 Load Upper Immediate (16 bits shifted left by 16) LUI R5 R5 0000 0000 7/2/2011 cslab@ntua 2010-2011 41

How about larger constants? We'd like to be able to load a 32 bit constant into a register Must use two instructions; new "load upper immediate" instruction lui $t0, 1010101010101010 filled with zeros 1010101010101010 0000000000000000 Then must get the lower order bits right, i.e., ori $t0, $t0, 1010101010101010 1010101010101010 0000000000000000 ori 0000000000000000 1010101010101010 1010101010101010 1010101010101010 7/2/2011 cslab@ntua 2010-2011 42

Memory layout Topics to Review Text, data (static and heap), and the stack Procedure conventions Procedure call bookkeeping Caller Saved Registers: Return address $ra Arguments $a0, $a1, $a2, $a3 Return value $v0, $v1 $t Registers $t0 $t9 Callee Saved Registers: $s Registers $s0 $s7 Procedure structure Prologue: Body: Epilogue: allocate frame, save registers, assign locals procedure code restore registers, free frame 7/2/2011 cslab@ntua 2010-2011 43

Overview Data types Application / HLL requirements Hardware support (data and instructions) MIPS data types Support for bytes and strings Addressing Modes Data Instructions Large constants and far target addresses SPIM code 7/2/2011 cslab@ntua 2010-2011 44

Data Types Applications / HLL Integer Floating point Character String Date Currency Text, Objects (ADT) Blob double precision Signed, unsigned Hardware support Numeric data types Integers 8 / 16 / 32 / 64 bits Signed or unsigned Binary coded decimal (COBOL, Y2K!) Floating point 32 / 64 /128 bits Nonnumeric data types Characters Strings Boolean (bit maps) Pointers 7/2/2011 cslab@ntua 2010-2011 45

MIPS Data Types (1/2) Basic machine data type: 32 bit word 0100 0011 0100 1001 0101 0011 0100 0101 Integers (signed or unsigned) 1,128,878,917 Floating point numbers 201.32421875 4 ASCII characters C I S E Memoryaddresses (pointers) 0x43495345 Instructions 7/2/2011 cslab@ntua 2010-2011 46

MIPS Data Types (2/2) 16 bit constants (immediates) addi $s0, $0$10 $s1, 0x8020 lw $t0, 20($s0) Half word (16 bits) lh (lhu): load half word lh $t0, 20($s0) sh: save half word sh $t0, 20($s0) Byte (8 bits) lb (lbu): load byte sh $t0, 20($s0) sb: save byte sh $t0, 20($s0) 7/2/2011 cslab@ntua 2010-2011 47

Byte Instructions lb $s1, 4($s0) Address Memory Bytes $s0: $s1: 0x10000000 0xFFFFFFAA 0x10000000 lbu $s1, 2($s0) 10101010 $s0: $s1: 0x10000000 0x000000 AA 7/2/2011 cslab@ntua 2010-2011 48

String Manipulation Void strcpy (char[], char y[]) { int i; i = 0; while ((x[i]=y[i])!= 0) i = i + 1; } C convention: Null byte (00000000) represents end of the string Importance of comments in MIPS! strcpy: subi $sp, $sp, 4 sw $s0, 0($sp) add $s0, $zero, $zero L1: add $t1, $a1, $s0 lb $t2, 0($t1) add $t3, $a0, $s0 sb $t2, 0($t3) beq $t2, $zero, L2 addi $s0, $s0, 1 j L1 L2: lw $s0, 0($sp) addi $sp, $sp, 4 jr $ra 7/2/2011 cslab@ntua 2010-2011 49

Constants Smallconstants areused frequently (50% of operands) e.g., g, A = A + 5; Solutions Put 'typical constants' in memory and load them. Create hard wired registers (like $zero) for constants like 1. MIPS Instructions: slti $8, $18, 10 andi $29, $29, 6 ori $29, $29, 0x4a addi $29, $29, 4 8 29 29 4 101011 10011 01000 0000 0000 0011 0100 7/2/2011 cslab@ntua 2010-2011 50

Large Constants To load a 32 bit constant into a register: 1. Load (16) higher order bits lui $t0, 1010101010101010 1010 1010 1010 1010 0000 0000 0000 0000 2. Then must get the lower order bits right, i.e., ori $t0, $t0, 1010101010101010 $t0: 1010 1010 1010 1010 0000 0000 0000 0000 ori 0000 0000 0000 0000 1010 1010 1010 1010 1010 1010 1010 1010 1010 1010 1010 1010 7/2/2011 cslab@ntua 2010-2011 51

Addressing Modes Addresses for data and instructions Data (operands and results) Registers Memory locations Constants Efficient encoding of addresses (p (space: 32 bits) Registers (32) => 5 bits to encode address Destructive instructions: reg2 = reg2 + reg1 Accumulator Stack Orthogonality of opcodes and addressing modes 7/2/2011 cslab@ntua 2010-2011 52

Data Addressing Modes Register addressing Themost common (fastestand and shortest) add $3, $2, $1 Base addressing Operand is at a memory location with offset lw $t0, 20 ($t1) Immediate addressing Operand is a small constant within the instruction addi $t0, $t1, 4 (signed 16 bit integer) 7/2/2011 cslab@ntua 2010-2011 53

Addressing 1. Immediate addressing op rs rt Immediate 2. Register addressing op rs rt rd... funct Registers Register 3. Base addressing op rs rt Address Memory Register + Byte Halfword Word 4. PC-relative addressing op rs rt Address * 4 Memory PC + Word 5. Pseudodirect addressing op Address * 4 PC Memory Word 7/2/2011 cslab@ntua 2010-2011 54

Instruction Addressing Modes Addresses are 32 bits long Special purpose register it PC (program counter) ) stores the address of the current instruction PC relative addressing (branches) Address: PC + (constant in the instruction) * 4 beq $t0, $t1, 20 (0x15090005) Pseudodirect addressing (jumps) Address: PC[31:28] : (constant in the instruction) * 4 7/2/2011 cslab@ntua 2010-2011 55

SPIM Code PC main [0x00400020] [0x00400024] [0x00400028] [0x0040002c] [0x00400030] [0x00400034] [0x00400038] [0x0040003c] [0x00400040] [0x00400044] [0x00400048] exit MIPS machine code Pseudo MIPS add $9, $10, $11 (0x014b4820) main: add $t1, $t2, $t3 j 0x00400048 [exit] (0x08100012) j exit addi $9, $10, -50 (0x2149ffce) addi $t1, $t2, -50 lw $8, 5($9) (0x8d280005) lw $t0, 5($t1) lw $8, -5($9) (0x8d28fffb) lw $t0, -5($t1) bne $8, $9, 20 [exit-pc] (0x15090005) bne $t0, $t1, exit addi $9, $10, 50 (0x21490032) addi $t1, $t2, 50 bne $8, $9, -28 [main-pc] (0x1509fff9) bne $t0, $t1, main lb $8, -5($9) (0x8128fffb) lb $t0, -5($t1) j 0x00400020 [main] (0x08100008) j main add $9, $10, $11 (0x014b4820) exit: add $t1, $t2, $t3 7/2/2011 cslab@ntua 2010-2011 56

Far Target Address 0x00400000 Text Segment (252MB) (0x07fe0000) -2 17 PC (0x08000000) beq $s0, $s1, L1 (0x08020000) +2 17 bne $s0, $s1, L2 (0x08200000) L1: j L1 L2: 0x10000000 7/2/2011 cslab@ntua 2010-2011 57

Overview Pointers (addresses) and values Argument passing Storage lifetime and scope Pointer arithmetic Pointers and arrays Pointers in MIPS 7/2/2011 cslab@ntua 2010-2011 58

Pointers Pointer: a variable that contains the address of another variable HLL version of machine language memory address Why use Pointers? Sometimes only way to express computation Often more compact and efficient code Why not? Huge source of bugs in real software, perhaps the largest single source 1) Dangling reference (premature free) 2) Memory leaks (tardy free): can't have long-running jobs without periodic restart of them 7/2/2011 cslab@ntua 2010-2011 59

C Pointer Operators Suppose c has value 100, it is located in memory at address 0x10000000 Unary operator & gives address: p = &c; gives address of c to p; p points to c (p == 0x10000000) Unary operator * gives value that pointer points to if p = &c =>* p == 100 (Dereferencing a pointer) Deferencing data transfer in assembler... =... *p...;; load (get value from location pointed to by p) *p =...; store (put value into location pointed to by p) 7/2/2011 cslab@ntua 2010-2011 60

Pointer Arithmetic int x = 1, y = 2; /* x and y are integer variables */ int z[10]; /* an array of 10 ints, z points to start */ int *p; /* p is a pointer to an int */ p: x = 21; /* assigns x the new value 21 */ z[0] = 2; z[1] = 3 /* assigns 2 to the first, 3 to the next */ p = &z[0]; /* p refers to the first element of z */ 4 p = z; /* same thing; p[ i ] == z[ i ]*/ z[1] 3 p = p+1; /* now it points to the next element, z[1] */ z[0] 2 p++; /* now it points to the one after that, z[2] */ y: 2 *p = 4; /* assigns 4 to there, z[2] == 4*/ p = 3; /* bad idea! Absolute address!!! */ x: 21 p = &x; /* p points to x, *p == 21 */ z = &y illegal!!!!! array name is not a variable 7/2/2011 cslab@ntua 2010-2011 61

Assembly Code c is int, has value 100, in memory at address 0x10000000, p in $a0, x in $s0 1.p = &c; /* p gets 0x10000000*/ lui $a0,0x1000 # p = 0x10000000 2. x = *p; /* x gets 100 */ lw $s0, 0($a0) # dereferencing p 3. *p = 200; /* c gets 200 */ addi $t0,$0,200 sw $t0, 0($a0) # dereferencing p 7/2/2011 cslab@ntua 2010-2011 62

Example int strlen(char *s) { char *p = s; /* p points to chars */ while (*p!= \0 ) p++; /* points to next char */ return p - s; /* end - start */ } mov $t0,$a0 lbu $t1,0($t0) /* derefence p */ beq $t1,$zero, Exit Loop:addi $t0,$t0,1 /* p++ */ lbu $t1,0($t0) /* derefence p */ bne $t1,$zero, Loop Exit:sub $v0,$t0,$a0 jr $ra 7/2/2011 cslab@ntua 2010-2011 63

Argument Passing Options 2 choices Call by Value :passacopy a of the item to the function/procedure Call by Reference : pass a pointer to the item to the function/procedure Single word variables passed by value Passing an array? e.g., a[100] Pascal (call by value) copies 100 words of a[] onto the stack C (call by reference) passes a pointer (1 word) to the array a[] in a register 7/2/2011 cslab@ntua 2010-2011 64

Lifetime of Storage and Scope Automatic (stack allocated) Typical llocal lvariables of a function Created upon call, released upon return Scope is the function Heap allocated Created upon malloc, released upon free Referenced via pointers External l/ static ti Exist for entire program Code Static Heap Stack 7/2/2011 cslab@ntua 2010-2011 65

Arrays, Pointers, and Functions 4 versions of array function that adds two arrays and puts sum in a third array (sumarray) 1. Third array is passed to function 2. Ui Using a local l array (on stack) k)for result and passing a pointer to it 3. Third array is allocated on heap 4. Third array is declared static Purpose of example is to show interaction ti of fc statements, pointers, and memory allocation 7/2/2011 cslab@ntua 2010-2011 66

Version 1 int x[100], y[100], z[100]; sumarray(x, y, z); C calling convention means: sumarray(&x[0], &y[0], &z[0]); Really passing pointers to arrays addi $a0,$gp,0 # x[0] starts at $gp addi $a1,$gp,400 # y[0] above x[100] addi $a2,$gp,800 # z[0] above y[100] jal sumarray 7/2/2011 cslab@ntua 2010-2011 67

Version1: Compiled Code void sumarray(int a[], int b[], int c[]) { int i; for(i = 0; i < 100; i = i + 1) c[i] = a[i] + b[i]; } addi $t0,$a0,400 # beyond end of a[] Loop: beq $a0,$t0,exit lw $t1, 0($a0) # $t1=a[i] lw $t2, 0($a1) # $t2=b[i] add $t1,$t1,$t2 # $t1=a[i] + b[i] sw $t1, 0($a2) # c[i]=a[i] [ ] + b[i] addi $a0,$a0,4 # $a0++ addi $a1,$a1,4 # $a1++ addi $a2,$a2,4 # $a2++ j Loop Exit: jr $ra 7/2/2011 cslab@ntua 2010-2011 68

Version 2 int *sumarray(int a[],int b[]) { int i, c[100]; for(i=0;i<100;i=i+1) addi $t0,$a0,400 # beyond end of a[] addi $sp,$sp,-400 # space for c addi $t3,$sp,0 $sp # ptr for c c[i] = a[i] + b[i]; return c; addi $v0,$t3,0 # $v0 = &c[0] Loop: beq $a0,$t0,exit } lw $t1, 0($a0) # $t1=a[i] lw $t2, 0($a1) # $t2=b[i] add $t1,$t1,$t2 # $t1=a[i] + b[i] sw $t1, 0($t3) # c[i]=a[i] a[i]+b[i] addi $a0,$a0,4 # $a0++ $sp addi $a1,$a1,4 # $a1++ c[100] addi $t3,$t3,4 # $t3++ j Loop a[100] Exit: addi $sp,$sp, 400 # pop stack B[100] jr $ra 7/2/2011 cslab@ntua 2010-2011 69

Version 3 int * sumarray(int a[],int b[]) { int i; Code int *c; c = (int *) malloc(100); for(i=0;i<100;i=i+1) c[i] = a[i] + b[i]; return c; } Heap Static c[100] Not reused unless freed Can lead to memory leaks Java, Scheme have garbage collectors to reclaim free space Stack 7/2/2011 cslab@ntua 2010-2011 70

Version 3: Compiled Code addi $t0,$a0,400 # beyond end of a[] addi $sp,$sp, -12 # space for regs sw $ra, 0($sp) # save $ra sw $a0, 4($sp) # save 1st arg. sw $a1, 8($sp) # save 2nd arg. addi $a0,$zero,400 jal malloc addi $t3,$v0,0 # ptr for c lw $a0, 4($sp) # restore 1st arg. lw $a1, 8($sp) # restore 2nd arg. Loop: beq $a0,$t0,exit... (loop as before on prior slide ) j Loop Exit:lw $ra, 0($sp) # restore $ra addi $sp, $sp, 12 # pop stack jr $ra 7/2/2011 cslab@ntua 2010-2011 71

Version 4 int * sumarray(int a[],int b[]) { int i; static int c[100]; } for(i=0;i<100;i=i+1) c[i] = a[i] + b[i]; return c; Compiler allocates once for function, space is reused Will be changed next time sumarray invoked Why describe? used in C libraries Code Static c[100] Heap Stack 7/2/2011 cslab@ntua 2010-2011 72

Review MIPS operands Name Example Comments $s0-$s7, $t0-$t9, $zero, Fast locations for data. In MIPS, data must be in registers to perform 32 registers $a0-$a3, $v0-$v1, $gp, arithmetic. MIPS register $zero alw ays equals 0. Register $at is $fp, $sp, $ra, $at reserved for the assembler to handle large constants. Memory[0], Accessed only by data transfer instructions. MIPS uses byte addresses, so 2 30 memory Memory[4],..., sequential words differ by 4. Memory holds data structures, such as arrays, words Memory[4294967292] and spilled registers, such as those saved on procedure calls. 7/2/2011 cslab@ntua 2010-2011 73

Review MIPS assembly language Category Instruction Example Meaning Comments add add $s1, $s2, $s3 $s1 = $s2 + $s3 Three operands; data in registers Arithmetic subtract sub $s1, $s2, $s3 $s1 = $s2 - $s3 Three operands; data in registers add immediate addi $s1, $s2, 100 $s1 = $s2 + 100 Used to add constants load word lw $s1, 100($s2) $s1 = Memory[$s2 + 100] Word from memory to register store word sw $s1, 100($s2) Memory[$s2 + 100] = $s1 Word from register to memory Data transfer load byte lb $s1, 100($s2) $s1 = Memory[$s2 + 100] Byte from memory to register store byte sb $s1, 100($s2) Memory[$s2 + 100] = $s1 Byte from register to memory load upper immediate lui $s1, 100 $s1 = 100 * 2 16 Loads constant in upper 16 bits branch on equal beq $s1, $s2, 25 if ($s1 == $s2) go to PC + 4 + 100 branch on not equal bne $s1, $s2, 25 if ($s1!= $s2) go to Conditional PC + 4 + 100 branch set on less than slt $s1, $s2, $s3 if ($s2 < $s3) $s1 = 1; else $s1 = 0 Equal test; PC-relative branch Not equal test; PC-relative Compare less than; for beq, bne set less than immediate slti $s1, $s2, 100 if ( $s2 < 100) $s1 = 1; else $s1 = 0 Compare less than constant jump j 2500 go to 10000 Jump to target address Uncondi- jump register jr $ra go to $ra For switch, procedure return tional jump jump and link jal 2500 $ra = PC + 4; go to 10000 For procedure call 7/2/2011 cslab@ntua 2010-2011 74

Conclusions Data can be anything Datatyping restricts data representations Applications restrict datatyping MIPS Datatypes: Number, String, Boolean Addressing: Pointers, Values Many addressing modes (direct, indirect, ) Memory based address storage (jr instruction) Arrays: big chunks of memory Pointers versus stack storage Be careful of memory leaks! 7/2/2011 cslab@ntua 2010-2011 75

Αναπαράσταση Εντολών στον Υπολογιστή εντολή μορφή op rs rt rd shamt funct address add R 0 reg reg reg 0 32 ten δ.ε. sub R 0 reg reg reg 0 34 ten δ.ε. addi I 8 ten reg reg δ.ε. δ.ε. δ.ε. σταθ. lw I 35 ten reg reg δ.ε. δ.ε. δ.ε. διευθ. sw I 43 ten reg reg δ.ε. δ.ε. δ.ε. διευθ. 7/2/2011 cslab@ntua 2010-2011 76

Αναπαράσταση Εντολών στον Υπολογιστή Παράδειγμα: $t1 περιέχει base address πίνακα Α(32 bit/στοιχείο ί Α[i]) $s2 αντιστοιχίζεται στη μεταβλητή h Μεταγλωττίστε το A[300] = h + A[300]; lw $t0, 1200($t1) add $t0, $s2, $t0 sw $t0, 1200($t1) 7/2/2011 cslab@ntua 2010-2011 77

Αναπαράσταση Εντολών στον Υπολογιστή Παράδειγμα (συνέχεια): lw $t0, 1200($t1) add $t0, $s2, $t0 sw $t0, 1200($t1) Κώδικας Μηχανής?? op rs rt rd shamt funct 35 9 8 1200 0 18 8 8 0 32 43 9 8 1200 7/2/2011 cslab@ntua 2010-2011 78

Αναπαράσταση Εντολών στον Υπολογιστή Παράδειγμα (συνέχεια): op rs rt rd shamt funct 35 9 8 1200 0 18 8 8 0 32 43 9 8 1200 op rs rt rd shamt funct 100011 01001 01000 0000 0100 1011 0000 000000 10010 01000 8 0 32 101011 01001 01000 0000 0100 1011 0000 7/2/2011 cslab@ntua 2010-2011 79

Αναπαράσταση Εντολών στον Υπολογιστή Έννοια αποθηκευμένου προγράμματος Ο υπολογιστής κάνει πολλές εργασίες φορτώνοντας δεδομένα στο μνήμη. Δεδομένα και εντολές είναι στοιχεία στη μνήμη. Π.χ. compilers μεταφράζουν στοιχεία σε κάποια άλλα στοιχεία. 7/2/2011 cslab@ntua 2010-2011 80

Λογικές Λειτουργίες (Πράξεις) Λογικές Λειτουργίες Τελεστές C Εντολές MIPS Shift left << Shift right >> Sll (shift left logical) Srl (shift right logical) AND & and, andi OR or, ori NOT ~ nor 7/2/2011 cslab@ntua 2010-2011 81

SHIFT Λογικές Λειτουργίες (Πράξεις) $s0: 0000 0000 0000 0000 0000 0000 0000 1001 = 9 ten sll $t2, $s0, 4 Κάνουμε shift αριστερά το περιεχόμενο του $s0 κατά 4 θέσεις 0000 0000 0000 0000 0000 0000 1001 0000 = 144 ten και τοποθετούμε το αποτέλεσμα στον $t2.!!το περιεχόμενο του $s0 μένει αμετάβλητο!! 7/2/2011 cslab@ntua 2010-2011 82

SHIFT sll $t2, $s0, 4 Λογικές Λειτουργίες (Πράξεις) Kαταχωρητές (σκονάκι ) $s0,..., $s7 αντιστοιχίζονται στους 16 ως 23 $t0,..., $t7 αντιστοιχίζονται στους 8 ως 15 6 bit 5 bit 5 bit 5 bit 5 bit 6 bit op rs rt rd shamt funct 0 0 16 10 4 0 000000 00000 10000 01010 00100 000000 sll: opcode=0 0, funct=0 7/2/2011 cslab@ntua 2010-2011 83

AND, OR Λογικές Λειτουργίες (Πράξεις) $t2: 0000 0000 0000 0000 0000 1101 0000 0000 $t1: 0000 0000 0000 0000 0011 1100 0000 0000 and $t0, $t1, $t2 # Μάσκα $t0: 0000 0000 0000 0000 0000 1100 0000 0000 or $t0, $t1, $t2 $t0: 0000 0000 0000 0000 0011 1101 0000 0000 7/2/2011 cslab@ntua 2010-2011 84

Λογικές Λειτουργίες (Πράξεις) NOT, NOR $t1: 0000 0000 0000 0000 0011 1100 0000 0000 $t3: 0000 0000 0000 0000 0000 0000 0000 0000 not $t0, $t1 δεν υπάρχει γιατί θέλουμε πάντα 2 καταχωρητές source. Άρα χρησιμοποιούμε τη nor: A NOR 0 = NOT (A OR 0) = NOT A nor $t0, $t1, $t3 $t0: 1111 1111 1111 1111 1100 0011 1111 1111 7/2/2011 cslab@ntua 2010-2011 85

MIPS Arithmetic Instructions Παραδείγματα Instruction Παράδειγμα Έννοια Σχόλια add add$1,$2,$3 $1 = $2 + $3 3 operands; exception possible subtract sub $1,$2,$3 $1 = $2 $3 3 operands; exception possible add immediate addi $1,$2,100 $1 = $2 + 100 + constant; exception possible add unsigned addu $1,$2,$3 $1 = $2 + $3 3 operands; no exceptions subtract t unsigned subu $1,$2,$3 $2 $3 $1 = $2 $3 3 operands; no exceptions add imm. unsign. addiu $1,$2,100 $1 = $2 + 100 + constant; no exceptions multiply mult $2,$3 Hi, Lo = $2 x $3 64 bit signed product multiply pyunsigned multu$2,$3 Hi, Lo = $2 x $3 64 bit unsigned product divide div $2,$3 Lo = $2 $3, Lo = quotient, Hi = remainder Hi = $2 mod $3 divide unsigned divu $2,$3 Lo = $2 $3, Unsigned quotient & remainder Hi = $2 mod $3 Move from Hi mfhi $1 $1 = Hi Used to get copy of Hi Move from Lo mflo $1 $1 = Lo Used to get copy of Lo 7/2/2011 cslab@ntua 2010-2011 86

MIPS Logic/Shift Instructions Παραδείγματα Instruction Παράδειγμα Έννοια Σχόλια and and $1,$2,$3 $1 = $2 & $3 3 reg. operands; Logical AND or or $1,$2,$3 $1 = $2 $3 3 reg. operands; Logical OR xor xor $1,$2,$3 $1 = $2 $3 3 reg. operands; Logical XOR nor nor $1,$2,$3 $1 = ~($2 $3) 3 reg. operands; Logical NOR and immediate andi $1,$2,10 $1 = $2 & 10 Logical AND reg, constant or immediate ori $1,$2,10 $1 = $2 10 Logical OR reg, constant xor immediate xori $1, $2,10 $1 = ~$2 &~10 Logical XOR reg, constant shift left logical sll $1,$2,10 $1 = $2 << 10 Shift left by constant shift right logical srl $1,$2,10 $1 = $2 >> 10 Shift right by constant shift right ihtarithm. sra $1,$2,10 $2 10 $1 = $2 >> 10 Shift right iht(i (sign extend) shift left logical sllv $1,$2,$3 $1 = $2 << $3 Shift left by variable shift right logical srlv $1,$2, $3 $1 = $2 >> $3 Shift right by variable shift right arithm. srav $1,$2, $2 $3 $1 = $2 >> $3 Shift right arith. by variable 7/2/2011 cslab@ntua 2010-2011 87

beq, bne Εντολές Λήψης Αποφάσεων beq reg1, reg2, L1 #branch if equal Αν οι καταχωρητές reg1 και reg2 είναι ίσοι, πήγαινε στην ετικέτα L1 bne reg1, reg2, L1 #branch if not equal Αν οι καταχωρητές reg1 και reg2 δεν είναι ίσοι, πήγαινε στην ετικέτα L1 7/2/2011 cslab@ntua 2010-2011 88

Εντολές Λήψης Αποφάσεων Παράδειγμα: if(i == j) f = g + h; else f = g h; με f, g, h, i, j αντιστοιχούνται σε $s0,..., $s4 version 1 bne $s3, $s4, Else add $s0, $s1, $s2 j Exit Else:sub $s0, $s1, $s2 Exit: version 2 beq $s3, $s4, Then sub $s0, $s1, $s2 j Exit Then: add $s0, $s1, $s2 Exit: 7/2/2011 cslab@ntua 2010-2011 89

Βρόχοι (Loops) Εντολές Λήψης Αποφάσεων while e(save[i] == k) i += 1; με i = $s3, k = $s5, save base addr = $s6 Loop: sll $t1, $s3, 2 #πολ/ζω i επί 4 add $t1, $t1, $s6 lw $t0, 0($t1) bne $t0, $s5, Exit addi $s3, $s3, 1 j Loop Exit: 7/2/2011 cslab@ntua 2010-2011 90

Συγκρίσεις slt $t0, $s3, $s4 Εντολές Λήψης Αποφάσεων # set on less than Ο καταχωρητής $t0 τίθεται με 1 αν η τιμή στον $s3 είναι μικρότερη από την τιμή στο $s4. Σταθερές ως τελεστέοι είναι δημοφιλείς στις συγκρίσεις slti $t0, $s2, 10 # set on less than # immediate Ο καταχωρητής $t0 τίθεται με 1 αν η τιμή στον $s2 είναι μικρότερη από την τιμή 10. 7/2/2011 cslab@ntua 2010-2011 91

MIPS Branch, Compare, Jump Παραδείγματα Instruction Παράδειγμα Έννοια branch on equal beq $1,$2,100 if ($1 == $2) go to PC+4+100 Equal test; PC relative branch branch on not eq. bne $1,$2,100 if ($1!= $2) go to PC+4+100 Not equal test; PC relative branch set on less than slt $1,$2,$3 if ($2 < $3) $1=1; else $1=0 Compare less than; 2 s comp. set less than imm. slti $1,$2,100 if ($2 < 100) $1=1; else $1=0 Compare < constant; 2 s comp. set less than uns. sltu $1,$2,$3 if ($2 < $3) $1=1; else $1=0 Compare less than; natural numbers set l. t. imm. uns. sltiu li $1,$2,100$ if ($2 < 100) $1=1; else $1=0 Compare < constant; natural numbers jump j 10000 go to 10000 Jump to target address jump register jr $31 go to $31 For switch, procedure return jump and link jal 10000 $31 = PC + 4; go to 10000 For procedure call 7/2/2011 cslab@ntua 2010-2011 92

Εντολές διακλάδωσης-branching instructions branch if equal beq $s3, 4s4, L1 # goto L1 if $s3 equals $s4 branch if!equal bne $s3, 4s4, L1 # goto L1 if $s3 not equals $s4 unconditional Jump jr $t1 # goto $t1... είναι I Type εντολές slt $t0, $s3, $s4 #set $t0 to 1 if $s3 is less than $s4;else set $t0 to 0 Όμως: j L1 # goto L1 Πόσο μεγάλο είναι το μήκος του address L1; Πόσο «μεγάλο» μπορεί να είναι το άλμα; 7/2/2011 cslab@ntua 2010-2011 93

MIPS Branch I Type OP rs rt address 6 bits 5 bits 5 bits 16 bits address: 16 bit memory address branch target offset in words added d to PC to form branch address. Παραδείγματα : Register in rs Final offset is calculated in bytes, equals to Register in rt {instruction field address} x 4, e.g. new PC = PC + 400 Branch on equal beq $1,$2,100 Branch on not equal bne $1,$2,100 7/2/2011 cslab@ntua 2010-2011 94

MIPS J Type J-Type: jump j, jump and link jal OP jump target 6 bits 26 bits jump target: jump memory address in words. Παραδείγματα : final jump memory address in bytes is calculated from {jump target} x 4 Branch on equal j 10000 Branch on not equal jal 10000 7/2/2011 cslab@ntua 2010-2011 95

Other Jump Instructions Jump (J type): j 10000 # jump to address 10000 Jump Register (NB: R type!): jr rs # jump to 32 bit address in register rs Jump and Link (J type): jal 10000 # jump to 10000 and save PC in R31 Use jal for procedure calls, it saves the return address (PC+4) in register 31 ($ra) Use jr $ra to return from subroutine Nested procedures must save $ra on a stack, and should use registers it $sp (stack pointer) and $fp (frame pointer) manage the stack. 7/2/2011 cslab@ntua 2010-2011 96

Summary of MIPS instruction formats R type (add, sub, slt, jr) op rs rt rd shamt funct 6 bits 5 bits 5 bits 5 bits 5 bits 6 bits I type (beq, bne + addi, lui + lw, sw) op rs rt immediate value / address offset 6 bits 5 bits 5 bits 16 bits J type (j, jl) jal) op jump target address 6 bits 26 bits 7/2/2011 cslab@ntua 2010-2011 97

Απ ευθείας διευθυνσιοδότηση- Σταθερές Οι πιο πολλές αριθμητικές εκφράσεις σε προγράμματα, περιέχουν σταθερές: ρςπ.χ. index++ Στον κώδικα του gcc: 52% εκφράσεων έχουν constants Στον κώδικα του spice: 69% των εκφράσεων! Τι κάνουμε με τις σταθερές (και αν είναι >16bit;) Θέλουμε: $s3=$s3+2 lw $t0, addr_of_constant_2($zero) add $s3,$s3,$t0 Αλλιώς: addi $s3,$s3,2 (add immediate) Όμοια: slti $t0,$s2, 10 # $t0=1 if $s2<10 7/2/2011 cslab@ntua 2010-2011 98

Τρόποι Διευθυνσιοδότησης στον MIPS: 1. Register Addressing 2. Base or Displacement Addressing 3. Immediate Addressing 4. PC-relative addressing (address is the sum of the PC and a constant in the instruction) 5. Pseudodirect addressing (the jump address is the 26 bits of the instruction, concatenated with the upper bits of the PC) 7/2/2011 cslab@ntua 2010-2011 99

1. Immediate addressing op rs rt Immediate addi $rt,$rs,immediate π.χ. lui $t0, 255 slti $t0, $s1, 10 I-Type 2. Register addressing op rs rt rd... funct 3. Base addressing op rs rt Address add $rd,$rs,$rt π.χ. add $t0,$s1,$s2 Registers Register Memory R-Type Register + Byte Halfword Word I-Type lw $rt,address($rs) π.χ. lw $t1,100($s2) 4. PC-relative addressing op rs rt Address Memory PC + Word I-Type bne $rs,$rt,address # goto {4 x address (0:15)} π.χ. bne $s0,$s1,l2 5. Pseudodirect addressing op Address Memory PC Word J-Type j address # goto {4 x address(0:25)}(0:27)-(28:31)(pc) 7/2/2011 cslab@ntua 2010-2011 100

Addressing Modes : Παραδείγματα Addr. mode Παράδειγμα Έννοια χρήση Register add r4,r3 Regs[r4] Regs[r4]+ Regs[r3] a value is in register Immediate add r4,#3 Regs[r4] Regs[r4]+3 for constants Displacement add r4,100(r1) Regs[r4] Regs[r4]+Mem[100+ Regs[r1]] local variables Reg. indirect add r4,(r1) Regs[r4] Regs[r4]+Mem[Regs[r1]] accessing using a pointer or comp. address Indexed add r4,(r1+r2) Regs[r4] Regs[r4]+Mem[Regs[r1]+ array addressing (base +offset) Regs[r2]] Direct add r4,(1001) Regs[r4] Regs[r4]+Mem[1001] addr. static data Mem. Indirect add r4,@(r3) Regs[r4] Regs[r4]+Mem[Mem[Regs[r3]]] g[ [ [ g[ ]]] if R3 keeps the address of a pointer p, this yields *p Autoincrement add r4,(r3)+ Regs[r4] Regs[r4]+Mem[Regs[r3]] Regs[r3] Regs[r3]+d Autodecrement add r4,-(r3) Regs[r3] Regs[r3]-d Regs[r4] Regs[r4]+Mem[Regs[r3]] stepping through arrays within a loop; d defines size of an element similar as previous Scaled add r4,100(r2)[r3] Regs[r4] g[ Regs[r4]+ g[ to index arrays Mem[100+Regs[r2]+Regs[r3]*d] 7/2/2011 cslab@ntua 2010-2011 101