Τ.Ε.Ι. Κρήτης Τμ. Μηχανικών Πληροφορικής Αρχιτεκτονική Υπολογιστών 3ο Μάθημα
Στο προηγούμενο... Είδαμε εντολές μεταφοράς δεδομένων και βρόγχους στον MIPS: lw: Εντολή φόρτωσης δεδομένων από την μνήμη στον επεξεργαστή sw: Εντολή μεταφοράς και αποθήκευσης δεδομένων από τον επεξεργαστή στη μνήμη
Στο προηγούμενο... Εντολές διακλάδωσης υπό συνθήκη: beq(branch if equal διακλάδωση ΑΝ ΕΙΝΑΙ ίσο) Διαβάζει τις τιμές δύο καταχωρητών και τις συγκρίνει. Αν είναι ίσες το πρόγραμμα διακλαδίζεται στην θέση μνήμης που υποδεικνύει η συγκεκριμένη εντολή, πχ: beq $16, $17, label bne (branch if not equal Διακλάδωση αν ΔΕΝ ΕΙΝΑΙ ΙΣΟ) Αντίστοιχα διαβάζει τις τιμές δύο καταχωρητών, τις συγκρίνει και αν ΔΕΝ είναι ίσες, διακλαδίζεται στην θέση μνήμης που υποδεικνύεται από την συγκεκριμένη εντολή
Επεξήγηση του προγράμματος του προηγούμενου μαθήματος.data #o,ti akolouthei tin entoli ayti einai arxikopoiiseis str_n:.asciiz"n = " str_s:.asciiz" s = " str_nl:.asciiz"\n.text #meta apo auti tin entoli akolouthei to kirios programma globl main #orizontai san global metavlites oste na mporoume na tis globl loop #xrisimopoiisoume san breakpoint main: addi $2, $0, 4 #klisi gia ektiposi simvoloseiras (me to noumero 4) la $4, str_n #pseudoentoli pros assembler gia na tiposei o,ti syscall #iparxei sti tampela str_n (thesi mnimis tis str_n)
Επεξήγηση του προγράμματος του προηγούμενου μαθήματος addi $2, $0, 5 #klisi sistimatos gia anagnosi integer syscall #to programma diavazei ton integer add $16, $2, $0 #Epistrefeitin timiintston ($16) add $17, $0, $0 # s = 0 addi $18, $0, 1 # i = 1 loop: add $17, $17, $18 # s = s + i addi $18, $18, 1 # i = i + 1 bne $18, $16, loop # Epanalamvaneiosoi!= n
Επεξήγηση του προγράμματος του προηγούμενου μαθήματος addi $2, $0, 4 #kalei tin print_string la $4, str_s #orizei tin dieuthinsi tou string syscall #tiponei to string addi $2, $0, 1 #kaleitin print_int(me to noumero1 ) add $4, $17, $0 #Antigrafeito s ($17) ston$4 syscall #tiponei to s addi $2, $0, 4 la $4, str_nl #kai allazei grammi syscall j main #kaixsanaapotin arxi
Πρόγραμμα για επανάληψη Φτιάξτε πρόγραμμα το οποίο θα κάνει τα εξής: Θα ζητάει συνέχεια έναν ακέραιο αριθμό nμέχρι να του δώσουμε την τιμή -1. Μόλις γίνει αυτό, το πρόγραμμα θα τυπώνει το άθροισμα όλων των αριθμών που του έχουμε ως τώρα δώσει και θα επαναλαμβάνεται εις άπειρον
Βήματα 1. Φτιάξτε τον κώδικα που να τυπώνει τα στοιχεία σας (Όνοματεπώνυμο, ΑΜ, Εξάμηνο) Πώς τυπώνουμε μια συμβολοσειρά; 2. Διαμορφώστε τον κώδικα έτσι ώστε να ζητάει και να διαβάζει έναν ακέραιο nαριθμό και να τον τυπώνει Πώς διαβάζουμε ακέραιους αριθμούς;
Βήματα 3. Διαμορφώστε τον κώδικα έτσι ώστε να ζητάει συνέχειατον ακέραιο nμέχρι να του δώσετε -1. 4. Όταν του δώσετε -1 να τυπώνει το άθροισμα x όσων αριθμών έχετε δώσει 5. Το πρόγραμμα πρέπει να ξεκινάει ξανά Ατέρμονας βρόγχος
Προσπελάσεις Μνήμης στον MIPS Εντολές load και store Οι επεξεργαστές κατηγορίας RISCδεν μπορούν να κάνουν πράξεις απ ευθείας σε νούμερα μέσα στη μνήμη Για αυτό το λόγο είναι απαραίτητο να Μπορούν να διαβάσουν στοιχεία από τη μνήμη του υπολογιστή, Να τα αντιγράψουν σε έναν καταχωρητή μέσα στον επεξεργαστή για να κάνει αυτός τις απαραίτητες πράξεις Να επιστρέψει στην μνήμη δεδομένα που έχουν υπολογιστεί και έχουν προσωρινά καταχωρηθεί σε έναν καταχωρητή, στην κεντρική μνήμη
Προσπελάσεις Μνήμης: Εντολές load και store Από την μνήμη μπορούν να διαβαστούν είτε Ολόκληρη λέξη(32 bits 4 byte) Μισή λέξη (16 bit) Ένα byte(8 bit) Αντιγραφή λέξης από μνήμη σε καταχωρητή: lw $rd, imm($rx) όπου: $rd ο καταχωρητής προορισμού $rxκαταχωρητής index register. immσταθερός αριθμός
Πώς λειτουργεί η αντιγραφή από μνήμη σε καταχωρητή lw $rd, imm($rx) Όταν θέλουμε να καλέσουμε ένα στοιχείο από την μνήμη για επεξεργασία, πρέπει πρώτα να πούμε πού βρίσκεται. Αυτό γίνεται με την πράξη imm($rx)όπου όταν ορίσουμε έναν δείκτη καταχωρητή και την σταθερή τιμή immτότε ορίζουμε την ακριβή θέση μνήμης που ο MIPSθα καλέσει το δεδομένο για να το αποθηκεύσει στον καταχωρητή του $rd Η εντολή αυτή δηλαδή προκαλεί ανάγνωση από την θέση imm($rx) της μνήμης
Η μνήμη σαν πίνακας Η μνήμη μπορεί εύκολα να συμβολιστεί σαν ένας πίνακας M [ ]. Μ [Α]δείχνει ότι έχουμε έναν πίνακα που συμβολίσουμε ότι το περιεχόμενο που εμείς ζητάμε τώρα είναι στη θέση μνήμης με διεύθυνση A. Η προηγούμενη εντολή σε πιο κατανοητή γλώσσα μεταφράζεται σε Μ [imm($rx)]
Αντιγραφή από καταχωρητή στη μνήμη sw $rs, imm($rx) Όπου: $rs Καταχωρητής πηγής Imm($rx)η θέση μνήμης που θα αποθηκευτεί ένα δεδομένο Αντίστοιχα με την lw, η sw γράφει στη θέση μνήμηςμε διεύθυνση (imm + $rx), δηλαδή προκαλεί την αντιγραφή M[imm + $rx] <-- $rs
Διευθύνσεις Bytes και Περιορισμοί Ευθυγράμμισης Ο MIPS είναι byte addressable Μία λέξη καταλαμβάνει 4 θέσεις μνήμης (λόγω του ότι είναι 4 bytes) Άρα όταν λέμε ότι ένας πίνακας καταλαμβάνει 100 θέσεις ακεραίων στη μνήμη, πιάνει 400 συνεχόμενες διευθύνσεις σ αυτή Η θέση ενός ακεραίου διαφέρει από αυτή του διπλανού του κατά 4
Διευθύνσεις Bytes και Περιορισμοί Ευθυγράμμισης 00 00 00 12 12 00 00 00 20 32 00 00 02 2E 558 00 00 07 3A 1955