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

Δίοδος δεδομένων για τις εντολές διακλάδωσης με συνθήκη και τις εντολές μεταπήδησης

Η εντολή beq (εντολή διακλάδωσης με συνθήκη) για να εκτελεστεί χρειάζεται δύο καταχωρητές (τα περιεχόμενά τους συγκρίνονται αν είναι ίσα), και ένα πεδίο offset των 16 bits που χρησιμοποιείται για τον υπολογισμό της διεύθυνσης του στόχου διακλάδωσης. Η μορφή της εντολής είναι:

beq $1, $2, offset

Για την εκτέλεση αυτής της εντολής πρέπει να υπολογίσουμε τη διεύθυνση του στόχου διακλάδωσης, προσθέτοντας το πεδίο offset της εντολής, μετά από την επέκταση προσήμου, στο περιεχόμενο του απαριθμητή προγράμματος. Υπάρχουν δύο λεπτομέρειες στην αρχιτεκτονική συνόλου εντολών που χρειάζονται προσοχή:

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

Η διεύθυνση του στόχου διακλάδωσης πρέπει να απέχει από την προηγούμενη διεύθυνση κατά πολλαπλάσιο του 4 (δεδομένου ότι οι εντολές είναι 32 bits=4 bytes). Αυτό επιτυγχάνεται με τον εξής τρόπο: γράφουμε στο πεδίο offset οποιοδήποτε αριθμό και τον ολισθαίνουμε αριστερά κατά 2 bits.

Για την εκτέλεση της εντολής διακλάδωσης με συνθήκη, πρέπει να προσδιοριστεί εάν η επόμενη εντολή είναι η εντολή που ακολουθεί σειριακά ή είναι η εντολή στη διεύθυνση του στόχου διακλάδωσης. Όταν η συνθήκη είναι αληθής (π.χ. οι τελεστέοι είναι ίσοι), τότε η διεύθυνση του στόχου διακλάδωσης γίνεται η νέα τιμή του απαριθμητή προγράμματος και λέμε ότι η διακλάδωση ακολουθείται. Εάν οι τελεστέοι δεν είναι ίσοι, τότε η ενημερωμένη τιμή του απαριθμητή προγράμματος αντικαθιστά την ήδη υπάρχουσα (όπως γίνεται και στα υπόλοιπα είδη των εντολών). Σ' αυτή την περίπτωση λέμε πως η διακλάδωση δεν ακολουθείται.


Η εντολή διακλάδωσης με συνθήκη επιτελεί δύο λειτουργίες: συγκρίνει τα περιεχόμενα των καταχωρητών και υπολογίζει τη διεύθυνση του στόχου διακλάδωσης. Για τον υπολογισμό της διεύθυνσης του στόχου διακλάδωσης θα χρειαστούμε μια μονάδα για την επέκταση προσήμου, όπως και στο σχήμα 3.2.9, και έναν αθροιστή. Επίσης πρέπει να αλλάξουμε το κομμάτι της διόδου δεδομένων που αφορά στην ανάκληση της εντολής. Για τη σύγκριση, θα χρειαστούμε το αρχείο καταχωρητών του σχήματος 3.2.6 που θα μας δώσει τους δύο τελεστέους. Για τη σύγκριση των δύο τελεστέων μπορούμε να χρησιμοποιήσουμε την ALU. Επίσης αφού η ALU έχει σαν έξοδο ένα σήμα (Zero) το οποίο μας δείχνει αν το αποτέλεσμα της πράξης είναι 0, μπορούμε να στείλουμε τους δύο τελεστέους στην ALU για να γίνει αφαίρεση. Εάν το σήμα Zero στη μονάδα της ALU είναι ενεργό, τότε οι δύο τιμές των τελεστέων είναι ίσες. Παρ' όλο που η έξοδος Zero της ALU μας δείχνει πάντα αν το αποτέλεσμα είναι 0, θα τη χρησιμοποιούμε μόνο για να ελέγχουμε την ισότητα των τελεστέων στις εντολές διακλάδωσης. Αργότερα θα δείξουμε πως συνδέονται τα σήματα ελέγχου στην έξοδο της ALU ώστε να χρησιμοποιηθούν στη δίοδο δεδομένων για την επιλογή της σωστής τιμής του απαριθμητή προγράμματος. Η δίοδος δεδομένων για την εντολή διακλάδωσης φαίνεται στο σχήμα 3.2.11.

Σχήμα 3.2.11 - Η δίοδος δεδομένων για την εντολή διακλάδωσης χρησιμοποιεί την ALU για τον υπολογισμό της συνθήκης διακλάδωσης και έναν ξεχωριστό αθροιστή για τον υπολογισμό της διεύθυνσης του στόχου διακλάδωσης. Για τον υπολογισμό της διεύθυνσης του στόχου διακλάδωσης, προστίθεται η τιμή του απαριθμητή προγράμματος αυξημένη κατά 4, με το πεδίο offset της εντολής (μετά από την επέκταση προσήμου και ολίσθηση κατά 2 bits προς τα αριστερά).


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

Πώς γίνεται ο υπολογισμός της διεύθυνσης του στόχου διακλάδωσης; Χρειάζεται κάποια επιπλέον κυκλώματα για να επιτευχθεί αυτό; Αν ναι, ποια είναι αυτά και πως τα συνδέουμε στο τμήμα της διόδου δεδομένων για τις εντολές διακλάδωσης; Να συγκρίνετε την απάντησή σας με την προηγούμενη παράγραφο.


Η εντολή μεταπήδησης (jump) επιδρά στην τιμή του περιεχομένου του απαριθμητή προγράμματος. Λειτουργεί αντικαθιστώντας ένα τμήμα του περιεχομένου του απαριθμητή προγράμματος, με τα 26 λιγότερο σημαντικά bits της εντολής, ολισθημένα αριστερά κατά 2 bits.

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

Τι πρέπει να αλλάξει στο σχήμα 3.2.11 έτσι ώστε η δίοδος δεδομένων να περιλαμβάνει και τις εντολές μεταπήδησης;

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


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