ΕΡΓΑΣΤΗΡΙΟ ΑΡΧΙΤΕΚΤΟΝΙΚΗΣ ΙΙ Εργαστήριο 2 ο ΔΟΜΗ ΠΡΟΓΡΑΜΜΑΤΟΣ- ΨΕΥΔΟΕΝΤΟΛΕΣ ΜΑΚΡΟΕΝΤΟΛΕΣ- ΔΙΑΔΙΚΑΣΙΕΣ (ΕΙΣΑΓΩΓΗ)
ΔΟΜΗ ΠΡΟΓΡΑΜΜΑΤΟΣ Ι Τρία κύρια τμήματα Ορισμός μοντέλου τμημάτων μνήμης και σωρού Ορισμός και αρχικοποίηση τιμών μεταβλητών Τμήμα κώδικα Καθορίζονται με ένα σύνολο οδηγιών προς τον συμβολομεταφραστή οι οποίες ξεκινούν με το πρόθεμα τελεία (.) και δεν μεταφράζονται σε κώδικα μηχανής αλλά επηρεάζουν τον κώδικα που παράγει ο συμβολομεταφραστής.
ΔΟΜΗ ΠΡΟΓΡΑΜΜΑΤΟΣ ΙΙ.model [είδος].stack [μέγεθος].data.code
ΔΟΜΗ ΠΡΟΓΡΑΜΜΑΤΟΣ ΙΙ.model [είδος].stack [μέγεθος].data.code
ΜΟΝΤΕΛΑ ΜΝΗΜΗΣ (.MODEL [ΕΙΔΟΣ]) Είδος Δεδομένα Κώδικας Tiny Ενιαίο 64KB Ενιαίο τμήμα δεδομένων και κώδικα Small 64KB 64KB 1 Τμήμα δεδομένων,, 1 Τμήμα κώδικα Medium 64KB 64KB/Τμήμα 1 Τμήμα δεδομένων, >1 Τμήματα κώδικα Compact 64KB/Τμήμα 64KB >1 Τμήματα δεδομένων, 1 Τμήμα κώδικα Large* οποιοδήποτε οποιοδήποτε >1 Τμήματα δεδομένων, >1 Τμήματα κώδικα Huge* οποιοδήποτε οποιοδήποτε >1 Τμήματα δεδομένων, >1 Τμήματα κώδικα * Στο μοντέλο Large το μεγαλύτερο μέγεθος μεταβλητής πρέπει να είναι 64KB ενώ στο μοντέλο Huge δεν υπάρχει ο παραπάνω περιορισμός
ΔΟΜΗ ΠΡΟΓΡΑΜΜΑΤΟΣ ΙΙ.model small.stack [μέγεθος].data.code
ΜΟΝΤΕΛΑ ΣΩΡΟΥ (.STACK) Το μέγεθος του σωρού καθορίζεται με απευθείας θί τιμή. Εξ ορισμού το μέγεθος του σωρού είναι 1024 ξ ρ μ μγ ς ρ Bytes (δεν αναφέρεται καθόλου το μέγεθος)
ΔΟΜΗ ΠΡΟΓΡΑΜΜΑΤΟΣ ΙΙ.model small.stack (ισοδυναμεί με.stack 1024).data.code
ΟΡΙΣΜΟΣ ΜΕΤΑΒΛΗΤΩΝ (.DATA) Ορισμός σταθερών και μεταβλητών εντός αυτού του τμήματος Για τις μεταβλητές εκτός από τον ορισμό του τύπου ορίζεται το μέγεθος (π.χ. για πίνακες) και οι ενδεχόμενες αρχικές τιμές Για τις σταθερές ορίζεται η τιμή αντικατάστασης
ΣΤΑΘΕΡΕΣ Για τον ορισμό μιας σταθεράς χρησιμοποιείται το πρόθεμα equ (equal)
ΤΥΠΟΙ ΔΕΔΟΜΕΝΩΝ - ΜΕΤΑΒΛΗΤΩΝ Τύπος db (define byte) dw (define word) dd (define doubleword) Λειτουργία Ορίζεται τύπος μεταβλητής με μέγεθος κάθε στοιχείου της μεταβλητής ένα byte Ορίζεται τύπος μεταβλητής με μέγεθος κάθε στοιχείου της μεταβλητής δύο bytes Ορίζεται τύπος μεταβλητής με μέγεθος κάθε στοιχείου της μεταβλητής τέσσερα bytes Οδηγία Λειτουργία dup (duplicate) Καθορισμός πλήθους στοιχείων μεταβλητής dup (?) Ητιμή στην παρένθεση καθορίζει την αρχική τιμή των στοιχείων της μεταβλητής. Όταν η παρένθεση περιέχει το? Η αρχική τιμή των στοιχείων της μεταβλητής είναι αδιάφορη.
ΔΟΜΗ ΠΡΟΓΡΑΜΜΑΤΟΣ ΙΙ.model small.stack.data len equ 20 var1 db 50 dup (30).code
ΤΜΗΜΑ ΚΩΔΙΚΑ (.CODE) Το Τμήμα αυτό περιέχει τις εντολές του προγράμματος και κλήσεις προς μακροεντολές και διαδικασίες Στην αρχή του κώδικα πραγματοποιείται αρχικοποίηση τμημάτων δεδομένων δ με αρχικοποίηση του καταχωρητή DS (Διαδικασία δύο βημάτων για αποφυγή λάθους!!!) mov AX, @data mov DS,AX ή mov AX, seg [ον. μεταβλ.] mov DS, AX
ΔΟΜΗ ΠΡΟΓΡΑΜΜΑΤΟΣ ΙΙ.model small.stack.data len equ 20 var1 db 50 dup (30).code mov AX, seg var1 mov DS, AX
ΕΞΟΔΟΣ ΣΤΟ ΛΕΙΤΟΥΡΓΙΚΟ ΣΥΣΤΗΜΑ(.ΕΧΙΤ) Η συγκεκριμένη οδηγία προς το συμβολομεταφραστή ισοδυναμεί με το τμήμα εντολών: mov AX,4C00h Int 21h δηλαδή με την κλήση της διακοπής λογισμικού που δηλαδή με την κλήση της διακοπής λογισμικού που επιστρέφει τον έλεγχο στο Λ.Σ.
ΔΟΜΗ ΠΡΟΓΡΑΜΜΑΤΟΣ ΙΙ.model small.stack.data len equ 20 var1 db 50 dup (30).code mov AX, seg var1 mov DS, AX
ΑΛΛΕΣ ΨΕΥΔΟΕΝΤΟΛΕΣ I Οδηγία assume end macro endm proc endp public Λειτουργία Συνδέει ένα τμήμα με έναν καταχωρητή τμήματος Τέλος προγράμματος. Εάν συνοδεύεται από κάποιο όνομα, είναι ένδειξη εκκίνησης της εκτέλεσής του. Έναρξη μακροεντολής Τέλος μακροεντολής (macro) Έναρξη διαδικασίας Τέλος διαδικασίας Επιτρέπει τη χρήση σταθερών ή μεταβλητών από άλλα προγράμματα, τα οποία πρόκειται να ενσωματωθούν με τον συνδέτη.
ΑΛΛΕΣ ΨΕΥΔΟΕΝΤΟΛΕΣ II Οδηγία Λειτουργία extrn Χρήση σταθερών ή μεταβλητών άλλου προγράμματος, στο οποίο έχουν δηλωθεί με την εντολή public include Ενσωμάτωση στο πηγαίο αρχείο άλλου αρχείου offset org ptr segment ends Υπολογισμός της σχετικής διεύθυνσης από τη φυσική διεύθυνση Ορισμός διεύθυνσης εντός του τμήματος, από την οποία θα τοποθετεί ο συμβολομεταφραστής τον κώδικα και τα δεδομένα που ακολουθούν Δείκτης μνήμης ο οποίος μαζί με το πρόθεμα byte ή word καθορίζει το μήκος του δεδομένου δ που θα διακινηθεί. Ορισμός τμήματος Τέλος τμήματος
ΜΑΚΡΟΕΝΤΟΛΕΣ Ι Ο κώδικας μιας μακροεντολής αντικαθίσταται στα σημεία εμφάνισης εντός του προγράμματος κατά αά τη μετάφραση! εάφραση! Δομή μακροεντολής [Όνομα μ μακροεντολής] macro [Παράμετροι] ρ μ ρ εντολές [Όνομα μακροεντολής] endm
ΜΑΚΡΟΕΝΤΟΛΕΣ ΙΙ.model small.stack.data msg1 db arxitektoniki II$ msg2 db earino 2010$ prtnmsg macro text mov dx, offset text mov ah, 09h Int 21h prtnmsg endm.code mov AX, seg var1 mov DS, AX mov ES, AX prtnmsg msg1 prtnmsg msg2
ΜΑΚΡΟΕΝΤΟΛΕΣ ΙIΙ.code mov AX, seg var1 mov DS, AX mov ES, AX mov dx, offset msg1 mov ah, 09h Int 21h mov dx, offset msg2 mov ah, 09h Int 21h.code mov AX, seg var1 mov DS, AX mov ES, AX prtnmsg msg1 prtnmsg msg2
ΔΙΑΔΙΚΑΣΙΕΣ I Οι διαδικασίες δ αποτελούν αυτόνομα τμήματα κώδικα που καλούνται μέσα από άλλα τμήματα κώδικα. Δομή Διαδικασιας [Όνομα μ Διαδικασίας] proc near ή far εντολές ret [Όνομα Διαδικασίας] endp
ΔΙΑΔΙΚΑΣΙΕΣ ΙΙ model small.stack.data msg db arxitektoniki II$.code mov AX, seg var1 mov DS, AX mov ES, AX call prtnmsg prtnmsg proc near mov dx, offset msg mov ah, 09h Int 21h ret prtnmsg endp