ΗΜΥ 213 Εργαστήριο Οργάνωσης Ηλεκτρονικών Υπολογιστών και Μικροεπεξεργαστών Εργαστήριο 1 Διδάσκων: Δρ. Γιώργος Ζάγγουλος Email: zaggoulos.george@ucy.ac.cy www.ece.ucy.ac.cy/courses/ece213
Εγκατάσταση και Λειτουργία QtSpim 9.1.17 Κατεβάστε το πρόγραμμα QtSpim9.1.17 από τον σύνδεσμο που υπάρχει στην ιστοσελίδα: http://spimsimulator.sourceforge.net/ Εγκαταστήστε το και στη συνέχεια ελέγξτε την ορθή του λειτουργία τρέχοντας το αρχείο hello wordκαι ως αποτέλεσμα δείτε αυτή τη φράση στο παράθυρο Console. Βοήθεια: File/load file (επιλέξτε το αρχείο) και μετά Simulator/Run-Continue (τρέξτε το αρχείο). Αν δεν βλέπετε το hello word επιλέξτε Window/Console. Τρέξτε επίσης τα 2 αρχεία add2numbers.s αρχικά με το Run και μετά με Single Stepsπαρατηρώντας τις τιμές των καταχωρητών PC, v0, a0, t1, t2 και t3. 2
QtSpim 9.1.17 (for windows) 3
Από το Πρόβλημα στη Λύση! Κατά την επίλυση οποιουδήποτε προβλήματος, συνειδητά ή όχι, πάντοτε ακολουθούμε κάποια στάδια μέχρι που να φτάσουμε στην επιθυμητή λύση. Σε προβλήματα προγραμματισμού, συνήθως ακολουθούνται τα εξής στάδια: 1. Κατανόηση του προβλήματος 2. Ανάλυση προβλήματος (είσοδοι, έξοδοι, σταθερές, μεταβλητές) 3. Βήματα προς επίλυση του προβλήματος 4. Συγγραφή κώδικα για το κάθε βήμα 5. Έλεγχος κώδικα βήμα προς βήμα 6. Τελικός έλεγχος κώδικα 4
Διάγραμμα Ροής Προγράμματος Flow - Chart Το διάγραμμα ροής είναι πολύ βοηθητικό στην επίλυση ενός προβλήματος αφού μας βοηθά να δούμε και οπτικά την πορεία επίλυσης του προβλήματος και να κατανοήσουμε καλύτερα τον κώδικα που πρέπει να γράψουμε για το κάθε ένα από τα βήματα που πρέπει να ακολουθήσουμε. Η επιλογή του αριθμού των βημάτων εξαρτάται από το ίδιο το πρόβλημα αλλά και από το πόσο αναλυτικό επιθυμούμε εμείς να το σχεδιάσουμε. Πρέπει τουλάχιστο να περιέχει όλους τους ελέγχους (beq/bne/bhi) όπως και τυχόν αλληλεπίδραση με τον χρήστη. Ας σχεδιάσουμε το πρώτο μας Διάγραμμα Ροής βάσει του παραδείγματος add2numbers.s 5
Παραδείγματα εντολών li $t1, 0x10 # Register $t1 = 16 = 10hex lb $t2, 0x12345678 # Reg. $t2=περιεχόμενα μνήμης (0Χ12345678) lw $t2, 0x12345678 #$t2=περιεχόμενα μνήμης (0Χ12345678/9/a/b) la $a0, welcome # Register $a0 = address of welcome message move $t4, $v0 #Register $t4 = Register $v0 add $t3, $zero, $t2 #Register $t3 = Register $t2 + 0 addi $t3, $t4, 1 #Register $t3 = Register $t4 + 1 ori $t3, $t4, 0x12 #Register $t3 = Reg. $t4 OR0001 0010 andi $t5, $t6, 255 #Register $t5 = Reg. $t6 AND1111 1111 6
Παραδείγματα εντολών xor $t6, $t6, $t6 # Register $t6 = Reg. $t6 XORReg. $t6 = 0 sll $t7, $t6, 3 #Register $t7 = Reg. $t6 <<< 3 = $t6 * 8 srl $t5, $t3, 5 #Register $t5 = Reg. $t3 >>> 5 = $t3 / 32 beq $t6, $t5, finals # If Reg $t6 = $t5, PC = address finals bne $t7, $t6, again #If Reg $t7 $t6, PC = address again beqz $t8, exit_now #If Reg $t8 = 0, PC = address exit_now bgt $t6, $t5, loop1 b step2 j step2 #If Reg $t6 > $t5, PC = address loop1 # PC = address step2 (πιο γρήγορη εντολή) # PC = address step2 (χωρίς περιορισμό) 7
Δημιουργία αρχείου add2numbers.s (Πρόσθεση 2 αριθμών και εκτύπωση αποτελέσματος) # your details with a description of the code.data result_is:.asciiz The result is:\n.text main: li $t1, 10 # load t1 with 10 li $t2, 7 # load t2 with 7 add $t3, $t1, $t2 # add t1 and t2 ->t3 8
Πρόσθεση 2 αριθμών και εκτύπωση αποτελέσματος (συνέχεια.) li$v0, 4 la $a0, result_is syscall li$v0, 1 move $a0, $t3 syscall li$v0, 10 syscall # syscall to print string # syscallto print an integer # syscall to exit programme # press enterto keep SPIM HAPPY! 9
Εκτέλεση Κώδικα 10
Εκτέλεση Κώδικα 11
Μαθησιακοί Στόχοι 1 ου Εργαστηρίου Κατανόηση τρόπου μελέτης για το ΗΜΥ213 Εγκατάσταση και βασική χρήση του προσομοιωτή QtSpim 9.1.17 στον υπολογιστή σας. Δομή προγράμματος (.s file) Κλήσεις συστήματος: 1, 4, 5, 10 Εντολές:li, la, add και move (σύνταξη και αποτέλεσμα εκτέλεσης της κάθε εντολής) Εντολές λογικών πράξεων και διακλάδωσης 12