Esercitazioni
PIC - Assembly
|
Le label
Assembly utilizza alcuni elementi fondamentali della programmazione, di cui il più importante è
la possibilità di operare
con simboli, il che permette non solo di prescindere dai codici binari che saranno inseriti nella
memoria programma, ma rende anche possibile
la scrittura di sorgenti che possono essere compilati per diverse situazioni o
tipi di chip (codice rilocabile, codice modulare) della stessa famiglia, pur senza assumere il distacco dal layer fisico che è
ottenibile con linguaggi più complessi, come C o BASIC.
Sicuramente uno degli elementi chiave della programmazione è l' impiego di
simboli al posto di valori assoluti.
Una Label (etichetta, nome) è una denominazione testuale (in genere
scelta di facile lettura e con riferimento menmonico) per una costante o una
variabile, per un registro, per un singolo bit in un registro, per una linea in un programma,
una sezione di un programma, l'inizio di set di righe: in sostanza, al posto di un valore
numerico o di un indirizzo di memoria, utilizzo una label.
Anche le label hanno alcune semplici regole a cui occorre attenersi:
Regole per le label:
- La lunghezza massima delle label è di 32 caratteri
- Possono iniziare con alfanumerici e _ (una sotttolineatura), ma
non con numeri e non con doppia sottolineatura, riservata
all' Assembler.
- Non possono essere utilizzate le parole riservate dal
compilatore per i suoi comandi, gli opcodes, le labe definite nei
files .inc.
- Non possono esserci due label con lo stesso nome in una unica
compilazione.
- Possono essere seguite da : che è un "label
operator", ma non fa parte della label
|
L' Assembler MPASM è case sensitive, per cui, alle regole sopra elencate, se
è abilitata la distinzione tra maiuscole e minuscole, le label potranno tener
conto di questa caratteristica. L' abilitazione del case sensitive (che è il
default) permetterà di avere un numero molto maggiore di label possibili,
oltre a consentire di utilizzare maiuscole e minuscole per identificare
elementi logici del sorgente.
Quindi:
Label |
Note |
nelmezzodelcammin |
è una label corretta |
nel mezzo del cammin |
non è una label corretta, in quanto non può contenere spazi |
nel_mezzodelcammin |
è una label corretta |
NelMezzodelCammin
nelmezzodelcammiN |
sono label corrette, diverse dalle precedenti e tra di loro, se è
abilitata la distinzione tra maiuscole e minuscole |
nelmezzodelcammindinostravita_miritrovai |
sarà rifiutata con una indicazione di errore in quanto più lunga
di 32 caratteri |
_nelmezzodelcammin |
è una label corretta |
_NelMezzoDelCammin |
è una label corretta, diversa dalla precedente se è abilitata la
distinzione tra maiuscole e minuscole |
__nelmezzodelcammin |
sarà rifiutata con una indicazione di errore in quanto inizia con
due __ |
mMacro |
label corretta. La m minuscola iniziale può essere utile per
distinguere macro istruzioni |
ValoreMassimo |
label corretta. Uso delle maiuscole per distinguere le parti della
funzione (in inglese camel case o media capital) |
mixedCASE |
label corretta. Uso delle maiuscole per indicare un elemento |
DATAstack |
come sopra |
2DUE |
sarà rifiutata con una indicazione di errore in quanto inizia un
numero |
_2DUE |
è una label corretta |
STATUS |
sarà rifiutata con una indicazione di errore in quanto è un nome
già definito nel file .inc |
Main: |
è una label corretta. Il segno : non fa parte della label |
Main |
è una label corretta identica alla precedente |
constant |
sarà rifiutata con una indicazione di errore in quanto è una
direttiva dell' Assembler |
La prima volta in cui una label appare nel sorgente corrisponde alla sua
dichiarazione.
Se non si utilizza una direttiva specifica per la dichiarazione, possono
venire dichiarate direttamente, semplicemente scrivendole, iniziando in prima
colonna. Ad esempio:
fiat_lux
bsf LED ;
accendi il LED
la label fiat_lux si riferisce all'
intera riga su cui è scritta e corrisponde come valore numerico a quello
dell' indirizzo della memoria programma in cui verrà posizionata l'
istruzione bsf. Qui la label si dichiara
"da sè" senza l' uso del #define.
Nel caso di duplicazione di label o di altri errori sintattici, l'
Assembler genererà messaggi di avviso e, solitamente, sarà
impossibilitato a completare la compilazione. |
Anche per queste direttive, il già citato MPASM
User's Guide ne riporta l'
elenco e le regole per il loro uso.
|