ELEMANIA
PIC16F690 - Assembly del PIC
Linguaggio assembly  del PIC

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.

Struttura di un sorgente assembly

In generale ogni linea di un file sorgente contenente codice assembly può essere costituita di quattro campi:

  1. un'etichetta (label)
  2. un codice mnemonico di un'istruzione
  3. eventuali operandi
  4. un commento

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).

Maiuscole o minuscole?

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:

              BSF STATUS, RP0        ; questa istruzione e la successiva sono uguali
              bsf status, rp0

inizio                                        ; questa etichetta e la successiva sono diverse
Inizio

 

Costanti numeriche

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):

              radix dec; da questo punto in avanti la base numerica di default è 10

La tabella seguente mostra i diversi tipi di costanti numeriche che possono essere utilizzate:

Note
Tipo
Sintassi
Esempio
1
Binario
B'binario'
B'00111001'
2
Ottale
O'ottale'
O'777'
3
Decimale
D'decimale' .decimale
D'100'
.100
4
Esadecimale
H'esadecimale' 0xesadecimale
H'9f'
0x9f
5
ASCII
A'carattere' 'carattere'
A'C'
'C'
  1. Un intero binario è 'b' o 'B' seguito da una o più cifre binarie '01' fra singoli apici.
  2. Un intero ottale è 'o' o 'O' seguito da una o più cifre ottali '01234567' fra singoli apici.
  3. Un intero decimale è 'd' o 'D' seguito da una o più cifre decimali '0123456789' fra singoli apici oppure '.' seguito da una o più cifre decimali (senza apici).
  4. Un intero esadecimale è 'h' o 'H' seguito da una o più cifre esadecimali '0123456789abcdefABCDEF' fra singoli apici oppure '0x' or '0X' seguito da una o più cifre esadecimali (senza apici).
  5. Un carattere ASCII è 'a' o 'A' seguito da un singolo carattere fra apici oppure, più semplicemente, un singolo carattere fra apici.

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'

 

precedente - successiva

Sito realizzato in base al template offerto da

http://www.graphixmania.it