Διδακτικά Βιβλία του Παιδαγωγικού Ινστιτούτου

Αναζήτηση

Βρες
Εμφάνιση

Τι θα μάθεις;

Όταν ολοκληρώσεις το μάθημα αυτό, θα μπορείς: - Να εξηγείς τις διαφορές της συμβολικής γλώσσας από τη γλώσσα μηχανής. - Να περιγράφεις το ρόλο των ψευδοεντολών σε ένα πρόγραμμα. - Να γράφεις απλά προγράμματα στη συμβολική γλώσσα του Άβακα.

Μέχρι τώρα είδαμε παραδείγματα προγραμματισμού του Άβακα όπου τόσο οι εντολές όσο και οι διευθύνσεις μνήμης ήταν γραμμένες σε αριθμητική μορφή και μάλιστα στο δυαδικό σύστημα. Τα προγράμματα αυτά είναι γραμμένα σε γλώσσα μηχανής (machine language).

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

Η εντολή 0001 φορτώνει (LoaDs) το συσσωρευτή (Accumulator) με μία τιμή. Ένα καλό μνημονικό όνομα για την εντολή αυτή είναι το LDA.

Μπορούμε επίσης να δίνουμε συμβολικά ονόματα στις διευθύνσεις της μνήμης, ώστε να δουλεύουμε με σύμβολα αντί με αριθμούς.

Αν συμβολίσουμε τη διεύθυνση 000000100101 (2) με το όνομα «IN_NUM», τότε η εντολή 0001 000000100101 θα μπορούσε να γραφτεί συμβολικά σαν «LDA IN_NUM».

Με τον τρόπο αυτό μπορούμε να γράφουμε τις εντολές του προγράμματος μας σε μια άλλη γλώσσα, που ονομάζουμε συμβολική γλώσσα (assembly language).

Ένα πρόγραμμα γραμμένο σε συμβολική γλώσσα, για να μπορεί να εκτελεστεί από τον υπολογιστή, πρέπει να μεταφραστεί πρώτα σε γλώσσα μηχανής. Τη μετάφραση αυτή των προγραμμάτων από συμβολική γλώσσα σε γλώσσα μηχανής την πραγματοποιεί ο ίδιος ο υπολογιστής, με ένα ειδικό πρόγραμμα που είναι γραμμένο σε γλώσσα μηχανής και ονομάζεται συμβολομεταφραστής (assembler).

Ο συμβολομεταφραστής, εκτός από το να μετατρέπει το πρόγραμμα από τη συμβολική γλώσσα σε γλώσσα μηχανής, αναγνωρίζει τα λάθη («συντακτικά» ή «ορθογραφικά»), που μπορεί να υπάρχουν στις εντολές του προγράμματός μας.

Για κάθε εντολή από το ρεπερτόριο εντολών του υπολογιστή υπάρχει και η αντίστοιχη εντολή σε συμβολική γλώσσα. Επιπλέον όμως η συμβολική γλώσσα διαθέτει μερικές ακόμα εντολές, τις ψευδοεντολές (pseudo instructions). Οι ψευδοεντολές δεν εκτελούνται από τον υπολογιστή, αλλά χρησιμοποιούνται από το συμβολομεταφραστή κατά το μεταφραστικό στάδιο και διευκολύνουν τον προγραμματιστή όταν γράφει το πρόγραμμα.

Ας δούμε ποιες είναι οι συμβολικές μορφές των εντολών του Άβακα:

Συμβολικό όνομα - Κώδικας - Λειτουργία HLT = HaLT - 0000 - STOP LDA = LoaD A - 0001 - Φόρτωση του Α (A)

Κάθε εντολή σε ένα πρόγραμμα συμβολικής γλώσσας έχει την εξής μορφή: [pic]

Συμβολική ετικέτα εντολής: Το τμήμα αυτό της εντολής είναι προαιρετικό και αποτελεί το «όνομα» που δίνουμε στην εντολή για να μπορούμε να αναφερθούμε σε αυτή σε μία άλλη εντολή άλματος.

Συμβολικό όνομα της εντολής: Περιέχει μία από τις συμβολικές εντολές που είδαμε παραπάνω. Αυτό είναι το μόνο τμήμα της εντολής που υπάρχει υποχρεωτικά.

Τμήμα διεύθυνσης της εντολής: Στο τμήμα αυτό γράφουμε τα δεδομένα που αντιστοιχούν στο τμήμα διεύθυνσης της εντολής γλώσσας μηχανής.

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

Η εντολή «STA 10» αποθηκεύει το περιεχόμενο του Α στη θέση μνήμης με διεύθυνση 10. Αν αυτή η θέση μνήμης χαρακτηρίζεται από την ετικέτα SUM, τότε μπορούμε να γράψουμε την εντολή σαν «STA SUM» η οποία αποθηκεύει το περιεχόμενο του Α στη θέση μνήμης που συμβολίζεται με την ετικέτα SUM. Παρακάτω θα δούμε πώς αντιστοιχίζουμε στο πρόγραμμα μας θέσεις μνήμης για δεδομένα με ετικέτες.

Αν στη συνέχεια θέλουμε να μεταφέρουμε στον Α τα περιεχόμενα της επόμενης θέσης μνήμης από τη SUM, θα γράψουμε «LDA SUM+1».

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

Η εντολή «JMP START» προκαλεί άλμα στην εντολή με ετικέτα START, ενώ η εντολή «JMP START+1» προκαλεί άλμα στην επόμενη από την εντολή με ετικέτα START.

Η ειδική ετικέτα εντολής «*» συμβολίζει την ίδια την εντολή.

Ας δούμε το πρόγραμμα: MLA 10 LDA SUM JMP *-2

Όταν φθάσουμε στην τελευταία εντολή, θα εκτελεστεί ένα άλμα στην εντολή που βρίσκεται 2 θέσεις πιο πριν απ' αυτή, δηλαδή στην πρώτη εντολή «MLA 10».

Στις εντολές εισόδου-εξόδου, όπως έχουμε δει, το δεξιότερο bit του τμήματος διεύθυνσης προσδιορίζει, αν τα δεδομένα που θα μεταφερθούν από ή προς την περιφερειακή συσκευή θα ερμηνευθούν σαν αριθμός ή σαν χαρακτήρας. Στη συμβολική γλώσσα το τμήμα διεύθυνσης έχει αντίστοιχα το περιεχόμενο Ο ή 1.

Με την εντολή ΙΝΡ 1 διαβάζουμε από το πληκτρολόγιο έναν οκταδικό αριθμό που αποθηκεύεται στο συσσωρευτή Α.

Σύγκρινε το πρόγραμμα αυτό με το παράδειγμα της σελίδας 56.

Στις εντολές ολίσθησης το τμήμα διεύθυνσης περιέχει τον αριθμό των θέσεων κατά τις οποίες θέλουμε να ολισθήσουμε το συσσωρευτή.

Η εντολή «SAR 12» ολισθαίνει το συσσωρευτή Α κατά 12 θέσεις προς τα δεξιά.

Σχόλια: Στο τελευταίο τμήμα, που είναι προαιρετικό, γράφουμε ένα κείμενο της επιλογής μας, το οποίο αποτελεί επεξήγηση για τη λειτουργία της εντολής. Ο συμβολομεταφραστής αγνοεί το τμήμα αυτό.

Στην παρακάτω εντολή, το κείμενο «Αποθήκευση του Α» αναγνωρίζεται από το συμβολομεταφραστή σαν σχόλιο, και έτσι αγνοείται.

STA 17 Αποθήκευση του Α