Assembler directives

Assembler directives

Ενώ οι εντολές λένε τι η CPU θα κάνει οι directives (αλλιώς ψευδοεντολές) δίνουν κατευθύνσεις στον assembler. Για παράδειγμα οι εντολές LDI και ADD είναι εντολές στην CPU ενώ οι .EQU , .DEVICE και .ORG είναι directives στον assembler. Στις επόμενες ενότητες παρουσιάζουμε τις πιο συνηθισμένες directives του AVR μικροελεγκτή και πως χρησιμοποιούνται. Οι directives μας βοηθούν να αναπτύξουμε τον κώδικα ευκολότερα και να τον κάνουμε ευανάγνωστο.

.EQU

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

.EQU  COUNT = 0x25
…
LDI R21, COUNT  ;   R21 = 0x25

Όταν εκτελείται η παραπάνω εντολή “LDI R21, COUNT” ο καταχωρητής R21 θα φορτωθεί με την τιμή 0x25. Με την .EQU directive μπορούμε να τροποποιήσουμε μαζικά αριθμητικές τιμές που αντιπροσωπεύονται από κοινή ετικέτα.

Όπως αναφέραμε σε προηγούμενη ενότητα, μπορούμε να χρησιμοποιούμε τα ονόματα των Ι/Ο καταχωρητών αντί τις διευθύνσεις τους (π.χ. μπορούμε να γράψουμε “OUT PORTB, R20” αντί “OUT 0x05, R20). Αυτό γίνεται με την βοήθεια της .EQU directive. Με την συμπερίληψη του κατάλληλου αρχείου τα Ι/Ο ονόματα καταχωρητών ορίζονται με τις διευθύνσεις τους χρησιμοποιώντας την .EQU directive.

.SET

Αυτή η directive χρησιμοποιείται για να ορίσουμε σταθερές τιμές ή σταθερές διευθύνσεις. Οι directives .SET και .EQU είναι πανομοιότυπες που διαφέρουν στο γεγονός ότι η τιμή που εκχωρείται στην .SET directive μπορεί να εκχωρηθεί ξανά αργότερα.

Χρησιμοποιώντας την .EQU για εκχώρηση σταθερών τιμών

Για την εξάσκηση της .EQU μελέτησε το ακόλουθο παράδειγμα:

                    ;  in hexadecimal
.EQU  DATA1 = 0X39  ;  one way to define hex value
.EQU  DATA2 = $39   ;  another way to define hex value

       ; in binary
.EQU  DATA3 = 0b00110101 ; binary (35 in hex)

       ; in decimal
.EQU   DATA4 = 39      ;  decimal numbers (27 in hex)

                       ; in ASCII
.EQU   DATA5 = ‘2’     ; ASCII characters

Χρησιμοποιώντας την .EQU για εκχώρηση SFR διευθύνσεων

Η .EQU directive χρησιμοποιείται ευρέως για εκχώρηση SFR διευθύνσεων. Μελέτησε τον ακόλουθο κώδικα:

.EQU COUNTER = 0x00        ; counter value 00
.EQU PORTB = 0x05          ; SFR Port B address
LDI R16, COUNTER           ; R16 = 0x00
OUT PORTB, R16             ; Port B (loc 0x05) now has 00 too

Χρησιμοποιώντας την . EQU για την εκχώρηση RAM διευθύνσεων

Μια άλλη συνηθισμένη χρήση της .EQU είναι η εκχώρηση διευθύνσεων της εσωτερικής μνήμης SRAM. Μελέτησε ένα άλλο παράδειγμα κώδικα, για να καταλάβεις περισσότερα:

.EQU  SUM = 0x120     ; assign RAM loc to SUM
LDI R20, 5            ; load R20 with 5
LDI R21, 2            ; load R21 with 2
ADD R20, R21          ; R20 = R20 + R21
ADD R20, R21          ; R20 = R20 + R21
STS SUM, R20          ; store the result in loc 0x120

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

Με την .EQU directive είναι ευκολότερο να αναφερόμαστε σε ένα όνομα παρά σε ένα αριθμό όταν προσπελαύνουμε θέσεις διευθύνσεων της RAM.

.ORG

Η .ORG directive χρησιμοποιείται για να ορίσουμε την αρχή των διευθύνσεων. Μπορεί να χρησιμοποιηθεί και για τα δυο κώδικα και δεδομένα.

.INCLUDE

H .INCLUDE directive προκαλεί τον AVR assembler να προσθέσει τα περιεχόμενα ενός αρχείου στον κώδικα που γράφουμε. Για παράδειγμα η επόμενη γραμμή κώδικα θα συμπεριλάβει ένα αρχείο με όνομα “myfile.inc”

.INCLUDE  myfile.inc

Στο Atmel Studio 7 όταν επιλέγεις ένα τσιπ το IDE αυτόματα προσθέτει τους ορισμούς στον κώδικα που γράφεις και δεν χρειάζεται να συμπεριλάβεις κάποιο αρχείο.

Κανόνες για τα ονόματα ετικετών στη γλώσσα Assembly

Επιλέγοντας ευανάγνωστες και ξεκάθαρες ετικέτες μπορείς να κάνεις τον κώδικα που γράφεις ξεκάθαρο και εύκολο να συντηρηθεί. Υπάρχουν αρκετοί κανόνες που πρέπει να ακολουθήσεις. Πρώτον το όνομα της ετικέτας να είναι μοναδικό. Τα ονόματα που χρησιμοποιούνται για ετικέτες θα πρέπει να αποτελούνται από αλφαβητικούς χαρακτήρες μικρά ή κεφαλαία, τα ψηφία 0 έως 9 και τους χαρακτήρες (?), (.), (@), (_), ($). Ο πρώτος χαρακτήρας του ονόματος ετικέτας πρέπει να είναι αλφαβητικός και δεν πρέπει να είναι αριθμός. Το όνομα μιας ετικέτας δεν πρέπει να είναι δεσμευμένο όνομα που χρησιμοποιεί ο assembler όπως τα μνημονικά ονόματα εντολών όπως π.χ. το “LDI” ή “ADD”.