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

Ειδική εντολή του VAX για δεικτοδότηση πινάκων

Έστω ότι έχουμε ένα δισδιάστατο πίνακα ARRAY(i,j) του οποίου το πρώτο στοιχείο ARRAY(0,0) βρίσκεται στη θέση μνήμης με διεύθυνση ARRAY. Το στοιχείο ARRAY(i,j) αυτού του πίνακα θα βρίσκεται στη θέση ARRAY+j*m+i (όπου m είναι ο αριθμός των γραμμών του πίνακα). Αν τώρα προσθέσουμε και μια τρίτη διάσταση έστω k, τότε η διεύθυνση του στοιχείου ARRAY(i,j,k) είναι ARRAY+k*n*m+j*m+i (όπου n είναι ο αριθμός των στηλών του πίνακα).

Η τελευταία έκφραση γράφεται και ως ((k*n)+j)*m+i και μας οδηγεί στον εξής αλγόριθμο για τον υπολογισμό της διεύθυνσης:
* πρόσθεσε τη νέα διάσταση στην ήδη υπάρχουσα τιμή του δείκτη και
* πολλαπλασίασε με το μέγεθος της.


Ο VAX διαθέτει την εντολή με κωδικό INDEX για την εκτέλεση αυτού του βασικού βήματος. Η εντολή αυτή έχει έξι τελεστέους οι οποίοι κατά σειρά είναι οι εξής:
* ο δείκτης,
* το κάτω όριό του δείκτη,
* το πάνω όριό του δείκτη,
* το μέγεθός του δείκτη,
* η ήδη υπολογισμένη τιμή του δείκτη,
* η τιμή του δείκτη μετά την εκτέλεση του βήματος αυτού.


Η λειτουργία της εντολής έχει ως εξής: καταρχήν, η τιμή του δείκτη ελέγχεται για να διαπιστωθεί αν όντως βρίσκεται μέσα στα επιτρεπόμενα όρια. Αν δε βρίσκεται προκύπτει λάθος, αλλιώς η τιμή του δείκτη προστίθενται στη μέχρι στιγμής υπολογιζόμενη τιμή και πολλαπλασιάζεται με το μέγεθός του. Το αποτέλεσμα είναι η νέα τιμή του δείκτη.

Παράδειγμα

Θεωρήστε έναν τρισδιάστατο πίνακα ARRAY[i, j, k] του οποίου κάθε στοιχείο είναι μία λέξη και οι δείκτες κυμαίνονται από 0 έως m-1, n-1 και p-1 αντίστοιχα. Ας θεωρήσουμε επίσης ότι ο R0 χρησιμοποιείται για τον υπολογισμό της τιμής του δείκτη. Ποια είναι η ακολουθία εντολών για την παρακάτω λειτουργία;

ARRAY(i, j, k) ¬ 250

Aπάντηση

Η ακολουθία εντολών έχει ως εξής:
INDEX K,#0,#p-1,#n,#0,R0
INDEX J,#0,#n-1,#m,R0,R0
INDEX I,#0,#m-1,#1,R0,R0
MOVW #250,ARRAY[R0]