Il linguaggio assembly in generale offre una notazione mnemonica che consente di scrivere programmi senza dover ricordare i codici operativi di ogni istruzione. Ogni microprocessore possiede il proprio linguaggio assembly con le proprie specifiche istruzioni. Inoltre la notazione mnemonica usata, anche all'interno della stessa famiglia di microprocessori, non sempre è completamente standardizzata come accade con le istruzioni dei linguaggi di programmazione ad alto livello (es. il C o il Pascal), nel senso che assemblatori diversi possono indicare le stesse istruzioni in modo diverso.
Nel seguito faremo riferimento al linguaggio assembly del PIC16F690 attenendoci alle convenzioni usate dall'ambiente di sviluppo MPLAB IDE prodotto dalla stessa Microchip.
In generale ogni linea di un file sorgente contenente codice assembly può essere costituita di quattro campi:
L'ordine e la posizione di questi quattro campi è importante. L'etichetta deve iniziare in prima colonna. Il campo mnemonico deve cominciare sulla seconda colonna (o oltre), separato da una tabulazione dal campo etichetta. Gli operandi seguono il codice mnemonico e il commento segue gli operandi. Una riga di codice può essere lunga al massimo 256 caratteri.
Le etichette sono nomi alfanumerici attribuiti liberamente a linee del programma e servono per le istruzioni di salto o per la definizione di costanti. Un'etichetta può essere formata al massimo di 32 caratteri, inizia, come si è detto, sulla prima linea e può essere terminata opzionalmente da due punti (:).
Qui sotto sono forniti alcuni esempi di istruzioni con etichette, operandi e commenti. Naturalmente una singola riga del programma non deve per forza contenere tutti e quattro i campi!
Etichetta | Istruzione | Operandi | Commento |
Loop: | BSF | 03,5 | ; istruzione con due operandi |
Delay | MOVLW | d'250' | ; istruzione con un operando |
; riga vuota | |||
NOP | ; esempio di istruzione senza operandi | ||
Inizio | ; etichetta su riga vuota | ||
; esempio di commento scritto a partire dalla prima colonna |
L'ultimo esempio mostra un commento scritto a partire dalla prima colonna. In generale i commenti possono essere scritti ovunque all'interno del comando (tranne, ovviamente, che dentro un'istruzione).
Le istruzioni possono essere scritte indifferentemente in maiuscolo o in minuscolo. I nomi delle etichette però sono case sensitive (cioè distinguono le maiuscole dalle minuscole), anche se questo comportamento può essere modificato agendo sulle opzioni dell'assemblatore:
Per default le costanti numeriche vengono interpretate come esadecimali. Ciò significa per esempio che l'istruzione
MOVLW 10
carica nel registro W il valore esadecimale 10 (cioè il valore decimale 16). Il tipo di base numerica di default può essere modificato usando la direttiva radix, posta generalmente all'inizio del programma, nel seguente modo (esempio):
La tabella seguente mostra i diversi tipi di costanti numeriche che possono essere utilizzate:
Come risulta dalla precedente tabella, le costanti esadecimali possono anche essere rappresentate nei seguenti modi alternativi:
MOVLW H’10’
MOVLW 0x10
ATTENZIONE:
Il valore delle costanti esadecimali deve sempre iniziare con una cifra numerica (e non con un carattere come A, B, C, D, E o F). Questo per evitare conflitti di nomi con le costanti letterali in un programma. In pratica per esempio il valore
E2
dovrà essere scritto come
0E2 oppure H'E2' oppure 0xE2
Per evitare di dimenticarsene, molti programmatori sono abituati a premettere uno zero davanti a tutti i valori esadecimali, anche quando non sarebbe strettamente necessario (ad esempio scrivono 03 invece di semplicemente 3).
Per rappresentare una costante decimale (cioè in base 10) si possono usare le seguenti notazioni:
MOVLW D’10’
MOVLW .10
Infine per le costanti binarie (in base 2) abbiamo:
MOVLW B'01111010'
Sito realizzato in base al
template offerto da
http://www.graphixmania.it