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

Εντολές ελέγχου ροής εκτέλεσης του προγράμματος

   Τέσσερις είναι οι διαφορετικοί τύποι εντολών αλλαγής ελέγχου ροής προγράμματος:

1. Διακλάδωση - όταν η αλλαγή στη διεύθυνση της επόμενης εντολής γίνεται υπό κάποια συνθήκη.

2. Μεταπήδηση - όταν η αλλαγή στη διεύθυνση της επόμενης εντολής γίνεται χωρίς συνθήκη.

3. Κλήση διαδικασίας

4. Επιστροφή από διαδικασία

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

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

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


   Οι εντολές ελέγχου προκαλούν αλλαγή στη ροή εκτέλεσης του προγράμματος. Σε αυτή την περίπτωση η διεύθυνση της επόμενης εντολής δεν προσδιορίζεται αυξάνοντας το περιεχόμενο του PC κατά 4 (στην περίπτωση που η εντολή καταλαμβάνει 4 bytes). Ωστόσο η διεύθυνση στην οποία μετατίθεται η ροή εκτέλεσης του προγράμματος από μία εντολή ελέγχου, πρέπει πάντα να προσδιορίζεται (μοναδική εξαίρεση αποτελεί η επιστροφή από τη διαδικασία, αφού δεν είναι γνωστή κατά τη μεταγλώττιση). Σε μία εντολή ελέγχου, παρέχεται ένα πεδίο μετατόπισης (offset), το οποίο προστίθεται στον απαριθμητή προγράμματος και δίνει τη διεύθυνση της επόμενης εντολής. Επομένως η νέα τιμή του PC είναι PC+μετατόπιση. Τέτοιες εντολές ελέγχου ροής καλούνται PC - σχετικές διακλαδώσεις. Η χρήση της PC - σχετικής διευθυνσιοδότησης επιτρέπει στον κώδικα του προγράμματος να τρέχει, ανεξάρτητα από το που είναι φορτωμένος. Αυτή η ιδιότητα καλείται ανεξαρτησία θέσης.

Για να υλοποιήσουμε επιστροφές από διαδικασίες (return) και έμμεσες μεταπηδήσεις στις οποίες η διεύθυνση προορισμού δεν είναι γνωστή κατά τη διάρκεια της μεταγλώττισης, δεν μπορούμε να χρησιμοποιήσουμε την PC - σχετική διευθυνσιοδότηση. Θα πρέπει δηλαδή, να προσδιορίσουμε το στόχο δυναμικά, έτσι ώστε να μπορεί να αλλάξει κατά τη διάρκεια εκτέλεσης του προγράμματος. Σε αυτή την περίπτωση πρέπει να προσπελάσουμε έναν καταχωρητή, ο οποίος περιέχει τη διεύθυνση του στόχου.

  Αυτές οι μεταπηδήσεις μέσω καταχωρητή είναι πολύ χρήσιμες στις εξής περιπτώσεις :

1. Στις εκφράσεις case ή switch που συναντώνται σε πολλές γλώσσες προγραμματισμού οι οποίες επιλέγουν μία από κάποιες συγκεκριμένες εναλλακτικές λύσεις που περιλαμβάνονται στην έκφραση.

2. Σε δυναμικά διαμοιραζόμενες βιβλιοθήκες (dynamically shared libraries), που επιτρέπουν σε μία βιβλιοθήκη να φορτωθεί μόνο όταν αυτή έχει πραγματικά εισαχθεί σε ένα πρόγραμμα.

3. Σε εικονικές συναρτήσεις (virtual functions), σε αντικειμενοστραφείς γλώσσες όπως η C++, που επιτρέπουν σε διάφορες ρουτίνες να καλούνται με βάση τον τύπο των δεδομένων.
 
 

   Οι πιο συχνά χρησιμοποιούμενες εντολές που προκαλούν αλλαγή στη ροή του προγράμματος είναι οι διακλαδώσεις. Οι 3 κυριότερες τεχνικές που χρησιμοποιούνται για τον προσδιορισμό της συνθήκης διακλάδωσης είναι οι εξής :
 
Όνομα
Πώς γίνεται ο έλεγχος της συνθήκης
Πλεονεκτήματα
Μειονεκτήματα
Καταχωρητής συνθήκης
Ελέγχεται το περιεχόμενο του καταχωρητή συνθήκης, στον οποίο έχει τοποθετηθεί το αποτέλεσμα της σύγκρισης.  Απλή Χρησιμοποιεί κάθε φορά τον καταχωρητή
Σύγκριση και διακλάδωση
Η σύγκριση είναι μέρος της διακλάδωσης. Συχνά η σύγκριση περιορίζεται σ' ένα υποσύνολο. Μία εντολή για κάθε διακλάδωση, αντί για δύο. Ίσως υπάρχει πάρα πολλή δουλειά για κάθε εντολή.

 
 
 
 
 
 
 
 

Καταχωρητής συνθήκης: Πολλοί υπολογιστές χρησιμοποιούν έναν καταχωρητή ειδικής χρήσης τα ψηφία του οποίου (flags) αλλάζουν κατά τη διάρκεια εκτέλεσης των εντολών ανάλογα με το είδος της εντολής και τα αποτελέσματά της. Για παράδειγμα το ψηφίο Ν (Negative) παίρνει την τιμή 1 αν το αποτέλεσμα μιας πράξης είναι αρνητικός αριθμός διαφορετικά, έχει την τιμή 0. Αντίστοιχα, το ψηφίο Z (Zero) παίρνει την τιμή 1 αν το αποτέλεσμα μιας πράξης είναι μηδέν. Με τον τρόπο αυτό, οι εντολές διακλάδωσης με συνθήκη έχουν τη μορφή BEQZ name (Branch if EQual) και ελέγχουν το αντίστοιχο ψηφίο του καταχωρητή συνθήκης για να αποφασίσουν αν θα πάνε στην επόμενη εντολή ή θα ακολουθήσουν τη διεύθυνση που ορίζει η διακλάδωση, δηλαδή το στόχο διακλάδωσης.