Πίσω

Δραστηριότητα 15

* Με ποιον τρόπο κωδικοποιείται η παρακάτω εντολή του υπολογιστή VAX και ποιο είναι το μέγεθός της σε bytes;

ADDW3 (R1), W 400(R2), @ B 200(R3)
Να θεωρήσετε πως ο έμμεσος με καταχωρητή τρόπος διευθυνσιοδότησης έχει κωδικό 6, ο τρόπος διευθυνσιοδότησης με μετατόπιση (W) έχει κωδικό 12 και ο έμμεσος με μετατόπιση (B) έχει κωδικό 11.
* Να εξηγήστε την εντολή χρησιμοποιώντας συμβολισμούς.


Απάντηση δραστηριότητας 15

Με την εντολή αυτή προστίθενται 2 τελεστέοι μεγέθους 16 bits (λόγω του γράμματος W που βρίσκεται κολλημένο στην εντολή ADD_ ). Για τον προσδιορισμό του 1ου τελεστέου χρησιμοποιείται ο έμμεσος καταχωρητή τρόπος διευθυνσιοδότησης. Έτσι ο 1ος τελεστέος βρίσκεται στη διεύθυνση μνήμης, η οποία είναι καταχωρημένη στον καταχωρητή R1.
Για τον προσδιορισμό του 2ου τελεστέου χρησιμοποιείται ο τρόπος διευθυνσιοδότησης με μετατόπιση. Έτσι ο 2ος τελεστέος βρίσκεται στη διεύθυνση μνήμης, η οποία υπολογίζεται προσθέτοντας την τιμή 400(μετατόπιση) στο περιεχόμενο του καταχωρητή R2. Το πρόθεμα W­ σημαίνει ότι η τιμή της μετατόπισης είναι μεγέθους 16 bits (2 bytes).
Για τον προσδιορισμό του τελεστέου προορισμού χρησιμοποιείται ο έμμεσος τρόπος διευθυνσιοδότησης με μετατόπιση. Έτσι ο τελεστέος προορισμού βρίσκεται στη διεύθυνση μνήμης, η οποία υπολογίζεται προσθέτοντας την τιμή 200 (μετατόπιση) στο περιεχόμενο του καταχωρητή R3.


    
ADDW3
    
    
Κωδικός λειτουργίας
    
    
6
    
    
R1
    
    
Προσδιοριστής
τελεστέου 1
    
12
6
Προσδιοριστής
τελεστέου 2
400
11
R3
Προσδιοριστής
τελεστέου 3
200

  Όπως παρατηρούμε, το μέγεθος της εντολής είναι 7 bytes. Στο 1ο byte βρίσκεται κωδικοποιημένη η πράξη, καθώς και το πλήθος των τελεστέων (3). Στο 2ο byte βρίσκεται ο προσδιοριστής τελεστέου του 1ου τελεστέου. Στα τρία επόμενα bytes βρίσκεται ο προσδιοριστής τελεστέου του 2ου τελεστέου. Επειδή η τιμή της μετατόπισης (400) είναι μεγέθους 16 bits, καταλαμβάνει 2 bytes. Τέλος, στα δύο τελευταία bytes βρίσκεται ο προσδιοριστής τελεστέου του 3ου τελεστέου. Η τιμή της μετατόπισης 200 είναι μεγέθους 1 byte.
Χρησιμοποιώντας συμβολισμούς, η εντολή εκτελείται ως εξής:
Mem[Mem[200 + Regs[R3]]]¬ Mem[Regs[R1]] + Mem[400+Regs[R2]]