Τ.Ε.Ι. Κρήτης Τμ. Μηχανικών Πληροφορικής Αρχιτεκτονική Υπολογιστών Τ.Ε.Ι. Κρήτης Τμ. Μηχανικών Πληροφορικής Αρχιτεκτονική Υπολογιστών 7ο Μάθημα
Επεξήγηση κώδικα του Παραδείγματος 2 του 6ου μαθήματος Το Παράδειγμα 2 ζητούσε δύο αριθμούς x και y: Για να τους συγκρίνει μεταξύ τους και να τυπώσει τον μεγαλύτερο Να δώσει ένα μύνημα ισότητας αν είναι ίσοι Να συγκρίνει τον μεγαλύτερο από τους 2 αριθμούς που δώσατε με τη σταθερά 5 Αν είναι μεγαλύτερο, τυπώνει το άθροισμα x + y Αν είναι μικρότερο, τυπώνει το γινόμενο x * y Ξαναξεκινά από την αρχή
Δήλωση ταμπελών για breakpoints μέσα στο πρόγραμμα .data x: .asciiz "\n Dose x = " y: .asciiz "\n Dose y = " nl: .asciiz "\n\n" greater: .asciiz "\n O megaliteros arithmos pou edoses einai:" equal: .asciiz "\n Ta dyo noumera pou edoses einai isa! \n" sum: .asciiz "\n x + y = " multi: .asciiz "\n x * y = " .text .globl main .globl stage1 .globl xgreater .globl stage2 .globl equalNum .globl immcomparison .globl plus Δήλωση μετα- βλητών συμβο- λοσειράς Δήλωση ταμπελών για breakpoints μέσα στο πρόγραμμα
main: stage1: addi $2, $0, 4 la $4, x syscall addi $2, $0, 5 add $10, $2, $0 la $4, y add $11, $2, $0 Εδώ ξεκινάει το stage 1 του προγράμματος για αυτό βάζουμε και το κατάλληλο breakpoint Τυπώνεται στην κονσόλα: Dose x = Και εδώ πρέπει να δώσετε ένα x νούμερο Το x νούμερο διαβάζεται από την κονσόλα και αποθηκεύεται στον καταχωρητή $10 Τυπώνεται στην κονσόλα: Dose y = Δίνετε το y νούμερο Και εδώ το y νούμερο διαβάζεται και καταχωρείται στον καταχωρητή $11
beq $10, $11, equalNum slt $15, $10, $11 beq $15, $0, xgreater Εδώ γίνεται η σύγκριση μεταξώ των x και y, αν x = y. Αν είναι ίσα, ο PC μεταβαίνει στην ταμπέλα equalNum beq $10, $11, equalNum slt $15, $10, $11 beq $15, $0, xgreater addi $2, $0, 4 la $4, greater syscall addi $2, $0, 1 add $4, $11, $0 add $12, $0, $11 j stage2 xgreater: add $4, $10, $0 add $12, $0, $10 Αν x!=y τότε γίνεται έλεγχος της ανισότητας x < y Αν $15 = 0 (ψευδής η παραπάνω ανισότητα) τότε μεταβαίνει ο PC στη ταμπέλα xgreater. Αλλιώς εκτελεί τα παρακάτω. Τυπώνεται στην κονσόλα: Ο μεγαλύτερος αριθμός που έδωσες είναι: Τυπώνει τον αριθμό και τον αποθηκεύει σε έναν άλλο καταχωρητή $12 για την σύγκριση που θα γίνει στο stage2, και στη συνέχεια μεταβαίνει στο stage2 Εδώ ο PC θα έρθει μόνο αν η παραπάνω >>beq ισχύει. Αυτό σημαίνει ότι το x είναι το μεγαλύτερο, άρα το τυπώνει εδώ και μεταβαίνει αυτομάτως στο stage2
equalNum: addi $2, $0, 4 la $4, equal syscall j stage2 stage2: slti $16, $12, 5 beq $16, $0, plus mul $18, $10, $11 la $4, multi addi $2, $0, 1 add $4, $18, $0 j stage1 Εδώ δείχνει ο PC όταν τα x = y. Τυπώνεται στην κονσόλα ότι «τα δύο νούμερα που έδωσες είναι ίσα» μεταβαίνει άμεσα στο stage2 του προγράμματος Εδώ ξεκινά το stage2 του προγράμματος Εδώ γίνεται η σύγκριση του μεγαλύτερου αριθμού που δώσαμε Πριν με τον αριθμό 5 (x ή y < 5). Αν δεν ισχύει αυτό, ο PC μεταβαίνει στη ταμπέλα plus όπου γίνεται η πρόσθεση Αλλιώς γίνεται ο πολλαπλασιασμός x * y Και τυπώνεται το γινόμενο κα αμέσως μετά το πρόγραμμα μεταβαίνει στη ταμπέλα stage1 για να ξαναξεκινήσει
plus: add $17, $10, $11 addi $2, $0, 4 la $4, sum syscall addi $2, $0, 1 add $4, $17, $0 j stage1 Εδώ έρχεται ο PC όταν το x ή το y > 5. Άρα γίνεται το Άθροισμα και τυπώνεται στην κονσόλα και στη συνέχεια μεταβαίνει ξανά στο stage1 του προγράμματος για να ξαναξεκινήσει.
Παράδειγμα: Φτιάξτε δύο πίνακες Α[5] και Β[5] των οποίων τα στοιχεία τα δίνετε από το πληκτρολόγιο. Να υπολογίζεται και να τυπώνεται το άθροισμα των στοιχείων των δύο πινάκων (Το άθροισμα α = και το άθροισμα β = ) Αν το άθροισμα του Α είναι μεγαλύτερο από το άθροισμα του Β, να τυπώνεται ο πίνακας Α, διαφορετικά να τυπώνεται ο πίνακας Β