Κεφάλαιο 2 | Ενότητα 6 | Επόμενο | Προηγούμενο | Λεξικό όρων

Ο προσομοιωτής PCSPim

Ο προσομοιωτής Spim προσομοιώνει την εκτέλεση των εντολών του υπολογιστή MIPS, εκτελώντας προγράμματα στη γλώσσα προγραμματισμού assembly. Ο προσομοιωτής Spim βρίσκεται στην ιστοσελίδα:

http://hermes.di.uoa.gr/PCSpim.zip

ΔΡΑΣΤΗΡΙΟΤΗΤΑ 2

Για περισσότερες λεπτομέρειες για τη γλώσσα assembly και τον τρόπο λειτουργίας του προσομοιωτή PCSPim κρίνετε σκόπιμο να συμβουλευτείτε το βιβλίο: "Computer Organization: The Hardware/Software Interface", Patterson & Hennessy, 2nd Ed., Morgan Kaufmann Publishers.


Παράδειγμα

Το παρακάτω πρόγραμμα σε κώδικα assembly εκτελεί την πρόσθεση δύο αριθμών. Συγκεκριμένα, προσθέτει το περιεχόμενο των διευθύνσεων vb, vc και αποθηκεύει το αποτέλεσμα στο διεύθυνση va).

. .data 0x10000000 (ορίζει τη διεύθυνση από την οποία θα αρχίσουν να αποθηκεύονται τα δεδομένα
va: .word 0x12345678
(αποθηκεύει στη διεύθυνση που ορίζεται από την εντολή .data, δηλαδή στην 0x10000000, την τιμή 0x12345678 και δίνει στη διεύθυνση αυτή την ετικέτα va)
vb: .word 0x01020304 (αποθηκεύει στη διεύθυνση 0x10000004 την τιμή 0x01020304 και δίνει στη διεύθυνση αυτή την ετικέτα vb)
vc: .word 0x04030201 (αποθηκεύει στη διεύθυνση 0x10000008 την τιμή 0x04030201 και δίνει στη διεύθυνση αυτή την ετικέτα vc)
.text (ορίζεται η αρχή των εντολών)
.globl main
(χρησιμοποιείται πάντα στην αρχή των προγραμμάτων του προσομοιωτή Spim και δηλώνει πως το συγκεκριμένο πρόγραμμα μπορεί να χρησιμοποιηθεί από διαφορετικά αρχεία του προσομοιωτή)
main: (ξεκινάει το κυρίως πρόγραμμα)
la $t0, vb (φορτώνεται στον καταχωρητή $t0 η διεύθυνση vb(όχι το περιεχόμενό της, αλλά η ίδια η διεύθυνση))
lw $t0, 0x0($t0)
(φορτώνονται στον καταχωρητή $t0 τα δεδομένα που βρίσκονται στη διεύθυνση μνήμης που περιέχονται στον καταχωρητή $t0)
la $t1, vc (φορτώνεται στον καταχωρητή $t1 η διεύθυνση vc)
lw $t1, 0x0($t1)
(φορτώνονται στον καταχωρητή $t1 τα δεδομένα που βρίσκονται στη διεύθυνση μνήμης που περιέχεται στον καταχωρητή $t1)
add $t1, $t0, $t1
(γίνεται η πρόσθεση των περιεχομένων των καταχωρητών $t0 και $t1 και το αποτέλεσμα αποθηκεύεται στον καταχωρητή $t1)
la $t0, va (φορτώνεται στον καταχωρητή $t0 η διεύθυνση va)
sw $t1, 0x0($t0) (αποθήκευση του περιεχομένου του καταχωρητή $t1 στη διεύθυνση μνήμης που περιέχεται στον καταχωρητή $t0)
li $v0, 10
syscall
(οι δύο αυτές εντολές τερματίζουν το πρόγραμμα στον προσομοιωτή Spim)


ΔΡΑΣΤΗΡΙΟΤΗΤΑ 3

α)Να εξηγήσετε την εκτέλεση των παρακάτω εντολών του υπολογιστή MIPS:
* lw $t0, 0x0($t0)
* add $t1, $t0, $t1
* sw $t1, 0x0($t0)
Να συγκρίνετε την απάντησή σας με τις απαντήσεις που δίνονται στο προηγούμενο παράδειγμα.
β)Να εκτελέσετε το πρόγραμμα του παραπάνω παραδείγματος στον προσομοιωτή Spim, (με τα δεδομένα που έχει), και να σχολιάσετε τα αποτελέσματα. Ο προσομοιωτής Spim βρίσκεται στη σελίδα:

http://hermes.di.uoa.gr/PCSpim.zip


ΔΡΑΣΤΗΡΙΟΤΗΤΑ 4

Δίνεται το παρακάτω πρόγραμμα σε κώδικα assembly.

.data      0x10000000
a: .word      0x1, 0x2, 0x4, 10
n:  .word      0x4
sum: .space   4
.text
.globl main
main: la $t0, sum
sw $0, 0($t0)
la  $t1, n
lw $t1, 0($t1)
add $t2, $0, $0
la $t3, a
brox: bge    $t2, $t1, telos
add    $t4, $t2, $t2
add    $t4, $t4, $t4
add    $t4, $t3, $t4
lw     $t4, 0x0($t4)
lw     $t5, 0x0($t0)
add    $t5, $t5, $t4
sw     $t5, 0x0($t0)
addi $t2, $t2, 1
beq  $0, $0, brox
telos: li    $v0, 10
syscall

α) Να εξηγήσετε την εκτέλεση των εντολών του προγράμματος.
β) Να περιγράψετε τη λειτουργία του προγράμματος.
γ) Να εκτελέσετε το παραπάνω πρόγραμμα στον προσομοιωτή Spim και να σχολιάσετε τα αποτελέσματα. Ο προσομοιωτής Spim βρίσκεται στη σελίδα:

http://hermes.di.uoa.gr/PCSpim.zip

ΑΠΑΝΤΗΣΗ ΔΡΑΣΤΗΡΙΟΤΗΤΑΣ 4