Tutorials - PIC - Corso A&C

 

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:
  1. La lunghezza massima delle label è di 32 caratteri
  2. Possono iniziare con alfanumerici e _ (una sotttolineatura), ma non con numeri e non con doppia sottolineatura, riservata all' Assembler.
  3. Non possono essere utilizzate le parole riservate dal compilatore per i suoi comandi, gli opcodes, le labe definite nei files .inc.
  4. Non possono esserci due label con lo stesso nome in una unica compilazione.
  5. 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.


 

 

Copyright © afg. Tutti i diritti riservati.
Aggiornato il 17/03/14.