Κατέβασμα παρουσίασης
Η παρουσίαση φορτώνεται. Παρακαλείστε να περιμένετε
ΔημοσίευσεΛάζαρος Γούσιος Τροποποιήθηκε πριν 7 χρόνια
1
Τ.Ε.Ι. Κρήτης Τμ. Μηχανικών Πληροφορικής Αρχιτεκτονική Υπολογιστών
Τ.Ε.Ι. Κρήτης Τμ. Μηχανικών Πληροφορικής Αρχιτεκτονική Υπολογιστών 4ο Μάθημα
2
Στο προηγούμενο... Ακολουθεί η επεξήγηση του κώδικα...
Είχαμε δει το πρόγραμμα το οποίο ζητούσε συνέχεια έναν ακέραιο αριθμό n μέχρι να του δώσουμε την τιμή -1. Μόλις γινόταν αυτό, το πρόγραμα τύπωνε το άθροισμα όλων των αριθμών που του είχαμε δώσει ως τότε και στη συνέχεια το πρόγραμμα επαναλαμβάνονταν εις άπειρον Σκοπός του προγράμματος ήταν η επανάληψη και η κατανόηση των Πώς διαβάζουμε και τυπώνουμε συμβολοσειρές και αριθμούς Πώς κάνουμε πράξεις (πρόσθεση και αφαίρεση) Πώς χρησιμοποιούμε Διακλαδώσεις υπό συνθήκη Ακολουθεί η επεξήγηση του κώδικα...
3
Ανάλυση του κώδικα Έστω ότι ορίζουμε εξ’αρχής τους καταχωρητές των μεταβλητών μας: $10 n $11 x $12 temp .data #Arxikopoiisi ton metavliton mas str_info: .asciiz " George Magoulakis #i simvoloseira poy dinei ta stoixeia mas am: mtp86 Exsamino: 2o "
4
Ανάλυση του κώδικα str_n: .asciiz "n = " str_x: .asciiz "apotelesma x = “ #oi alles simvoloseires str_nl: .asciiz "\n" .text #apo edo kai kato akolouthoun entoles .globl main #kanoume global tis sinartiseis main kai loop .globl loop #gia na xrisimopoiithoun san breakpoint main: #edo xsekina to kirios meros tou programmatos mas addi $12, $0, -1 #temp = -1 gia na to xrisimopoiisoume gia sigkrisi
5
Ανάλυση του κώδικα #tiponoume to onoma klp addi $2, $0, 4 la $4, str_info syscall loop: #edo xsekina i loop ipo sinthiki #Zitaei to n addi $2, $0, 4 #kanei klisi tis print string me to argument 4 la $4, str_n #Vriskei ti thesi mnimis pou xsekina to string "n = " syscall #tiponei n = #diavazei kai kataxorei to n addi $2, $0, 5 #kanei klisi tis read integer (argument: 5) syscall #diavazei tin metavliti pou dosame add $10, $2, $0 #kataxorei tin timi pou dosame sto $10
6
Ανάλυση του κώδικα add $11, $11, $10 #x = x + n bne $10, $12, loop #ginetai elegxos an to n != temp (-1) addi $11, $11, 1 #dinei x = x + 1 gia na apaleifei to -1 poy dosame #prin apo tin prosthesi addi $2, $0, 4 #kalei tin print string (argument: 4) la $4, str_x #gia na tiposei to "apotelesma x = " syscall #to tiponei addi $2, $0, 1 #kalei tin print gia na tiposei akeraio (argument: 1) add $4, $11, $0 #antistoixei ti timi x ($11) ston kataxoriti $4 syscall #kai tiponei to apotelesma tis praxsis
7
Ανάλυση του κώδικα addi $2, $0, 4 #kanei klisi tis print la $4, str_nl #tiponei "\n" syscall #tiponei add $10, $0, $0 #midenizei to n add $11, $0, $0 #midenizei to x j loop j main
8
Σχετικά με την μνήμη Υπάρχουν δύο είδη μνήμης : η DRAM (Dynamic Random Access Memory) και η Κρυφή (Cache) Μερικές DRAMs χρησιμοποιούνται μαζί για να φυλάγονται οι εντολές και τα δεδομένα ενός προγράμματος Η κρυφή μνήμη είναι μικρή και γρήγορη (χρόνος πρόσβασης ns), λειτουργεί ως ενδιάμεση μνήμη (buffer) της μνήμης DRAM. Είναι ένας ασφαλής χώρος για να κρύβουμε δεδομένα και εντολές.
9
Σχετικά με την μνήμη Χρόνος πρόσβασης (access time) είναι ο χρόνος που χρειάζεται από την στιγμή που τοποθετείται η διεύθυνση μνήμης στο διάδρομο δεδομένων, μέχρι τη στιγμή που τοποθετούνται από τη μνήμη τα δεδομένα στο διάδρομο Διατηρήσιμη μνήμη: οι μνήμες που όταν χαθεί η παροχή ηλ. Ρεύματος χάνουν τα δεδομένα που είναι αποθηκευμένα σε αυτές (RAM, DRAM κλπ) Μη διατηρήσιμη μνήμη: Το αντίθετο (βλ. Σκληρούς δίσκους κλπ)
10
Η μνήμη Γιατί χρειαζόμαστε Εντολές Μεταφοράς Δεδομένων στον MIPS;
Και ο λόγος που χρειάζεται η μνήμη; Διότι ο επεξεργαστής μπορεί να κρατήσει περιορισμένο αριθμό δεδομένων. Για αυτό χρειάζεται η μνήμη για την φύλαξη μεγάλων ποσοτήτων δεδομένων (πίνακες - μεταβλητές).
11
Η μνήμη Μπορεί να θεωρηθεί σαν έναν μεγάλο μονοδιάστατο πίνακα και η διεύθυνση που δείχνει την θέση μνήμης είναι ένας δείκτης
12
Η μνήμη σαν πίνακας Η μνήμη μπορεί εύκολα να συμβολιστεί σαν ένας πίνακας M [ ν ]. Μ [i] δείχνει ότι έχουμε έναν πίνακα που συμβολίσουμε ότι το περιεχόμενο που εμείς ζητάμε τώρα είναι στη θέση μνήμης με διεύθυνση i. Από την μνήμη μπορούν να διαβαστούν είτε Ολόκληρη λέξη (32 bits – 4 byte) Μισή λέξη (16 bit) Ένα byte (8 bit)
13
Προσπελάσεις Μνήμης στον MIPS
Εντολές load και store Οι επεξεργαστές κατηγορίας RISC δεν μπορούν να κάνουν πράξεις απ’ευθείας σε νούμερα μέσα στη μνήμη Για αυτό το λόγο είναι απαραίτητο να Μπορούν να διαβάσουν στοιχεία από τη μνήμη του υπολογιστή, Να τα αντιγράψουν σε έναν καταχωρητή μέσα στον επεξεργαστή για να κάνει αυτός τις απαραίτητες πράξεις Να επιστρέψουν στην μνήμη δεδομένα που έχουν υπολογιστεί και έχουν προσωρινά καταχωρηθεί σε έναν καταχωρητή, στην κεντρική μνήμη
14
load word (lw) Αντιγραφή λέξης ή δεδομένων από μνήμη σε καταχωρητή με “load word - lw”: lw $rd, m($rx) όπου: $rd ο καταχωρητής προορισμού $rx καταχωρητής index register Χρησιμοποιείται m σταθερός αριθμός για αντιστοίχηση τιμών στη μνήμη
15
Πώς λειτουργεί η αντιγραφή από μνήμη σε καταχωρητή
lw $rd, m($rx) Όταν θέλουμε να καλέσουμε ένα στοιχείο από την μνήμη για επεξεργασία, πρέπει πρώτα να πούμε πού βρίσκεται. Αυτό γίνεται με την πράξη m($rx)όπου όταν ορίσουμε έναν δείκτη καταχωρητή και την σταθερή τιμή m τότε ορίζουμε την ακριβή θέση μνήμης που ο MIPS θα καλέσει το δεδομένο για να το αποθηκεύσει στον καταχωρητή του $rd Η εντολή αυτή δηλαδή προκαλεί ανάγνωση από την θέση m($rx) της μνήμης
16
store word (sw) Για αποθήκευση δεδομένων από καταχωρητή στη μνήμη
sw $rs, m($rx) Όπου: $rs Καταχωρητής πηγής Imm($rx) η θέση μνήμης που θα αποθηκευτεί ένα δεδομένο Αντίστοιχα με την lw, η sw γράφει στη θέση μνήμης με διεύθυνση (m+ $rx), δηλαδή προκαλεί την αντιγραφή M[m + $rx] <-- $rs
17
Παράδειγμα Ας υποθέσουμε ότι έχουμε έναν πίνακα 4ων στοιχείων τα οποία με τις κατάλληλες εντολές πρέπει να τα δώσουμε για να γεμίσει ο πίνακας. Μόλις γίνει αυτό, να τυπώνει πίσω τα νούμερα που του δώσαμε. Έστω ότι: n: $16 (ορισμός πλήθους στοιχείων πίνακα = 4) i: $17 (μετρητής επαναλήψεων (για σύγκριση)) Α: $18 (καταχωρητής για αποθήκευση ή φόρτωση δεδομένων $19: Index register για την αντιστοίχηση των τιμών του πίνακα στις κατάλληλες θέσεις μνήμης
18
Διευθύνσεις Bytes και Περιορισμοί Ευθυγράμμισης
“Ο MIPS είναι byte addressable” Μία λέξη καταλαμβάνει 4 θέσεις μνήμης (λόγω του ότι είναι 4 bytes) Άρα όταν λέμε ότι ένας πίνακας καταλαμβάνει 100 θέσεις ακεραίων στη μνήμη, πιάνει 400 συνεχόμενες διευθύνσεις σ’αυτή Η θέση ενός ακεραίου διαφέρει από αυτή του διπλανού του κατά 4
19
Προσοχή στις θέσεις μνήμης!
Αφού έχουμε 4 στοιχεία στον πίνακα, αυτά θα καταλαμβάνουν 16 θέσεις μνήμης λόγω ότι όπως είπαμε 1 integer αντιστοιχεί σε 4 bytes. Σε κάθε επανάληψη ο δείκτης της μνήμης θα αυξάνει κατά 4 θέσεις μνήμης 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 x
20
Ξεκινώντας το πρόγραμμα...
.data x: .asciiz "give 4 numbers.. " nl: .asciiz "\n" .align 2 #sos! a: .space 16 #sos! .text Ταξινομεί δεδομένα σε ένα κελί μνήμης μεγέθους 𝟐 𝒏 bytes. Επομένως, για ακέραιους 4 byte τη χρησιμοποιούμε για μέγεθος 𝟐 𝟐 ή 4 bytes. Πάντα με την .align ακολουθεί η .space η οποία δηλώνει την συνολική μνήμη που θα καταλαμβάνουν τα δεδομένα
21
addi $16, $0, 4 #orizoume oti o pinakas tha exei 4 stoixeia
.globl main .globl loop .globl loop1 main: addi $2, $0, 4 la $4, x syscall la $4, nl addi $16, $0, 4 #orizoume oti o pinakas tha exei 4 stoixeia addi $17, $0, 0 #edo mpainei o metritis mas la $19, a Απαραίτητη και αυτή η ψευδοεντολή γιατι μας βοηθά να εντοπίσουμε την αρχική θέση μνήμης στην οποία θα αποθηκευτουν τα δεδομένα που θα εισάγουμε. Παίρνει ως παράμετρο το a για να προσδιορίσει τι περιοχή θα καταλάβουν τα δεδομένα στη μνήμη.
22
loop: addi $2, $0, 5 syscall #diavazei tous akeraious add $18, $2, $0 sw $18, 0($19) addi $19, $19, 4 #apothikeuei tous integers sti mnimi addi $17, $17, 1 bne $16, $17, loop addi $2, $0, 4 la $4, nl syscall #allazei grammi kai midenizei ton metriti addi $17, $0, 0
23
loop1: lw $18, -16($19) #kanei load apo tin sigkekrimeni thesi addi $19, $19, 4 #mnimis gia na tiposei meta addi $2, $0, 1 add $4, $18, $0 #tiponei tous akeraious syscall addi $2,$0,4 la $4, nl #allazei grammi addi $17,$17,1 #ayxsanei kata 1 ton metriti i bne $16, $17, loop1 j main _________________________________________________________ Τι θα αλλάζατε ώστε να τυπώνει ανάστροφα τα δεδομένα που του δώσατε; Να τυπώνει πρώτο, το τελευταίο νούμερο που του δώσατε. Hint! Ελέγξτε τις κίτρινες γραμμές του κώδικα!
24
Γράψτε ένα πρόγραμμα σε Assembly του MIPS που να διαβάζει 4 ακεραίους από την κονσόλα, να τους αποθηκεύει σ' ένα πίνακα (array) στη μνήμη, και στη συνέχεια να τυπώνει τα εξαπλάσιά τους και με την αντίστροφη σειρά.
Παρόμοιες παρουσιάσεις
© 2024 SlidePlayer.gr Inc.
All rights reserved.