I registri GPRs (General Purpose Registers)
Supponiamo di avere uno stack nei registri GPRs, con il puntatore di coda
che individua la prima
locazione di memoria non utilizzata. Nell'esempio qui rappresentato PUNTA_CODA
individua la locazione 0B3h, quindi l'ultimo valore contenuto nello stack č
quello nella posizione 0B2h.
Per leggere il dato contenuto in questa locazione di memoria, a differenza di
molti processori, nel PIC non esiste un'istruzione del tipo:
MOVF (PUNTA_CODA), W
occorre invece utilizzare due registri speciali denominati FSR e INDF; il primo conterrā l'indirizzo del registro puntato, nel secondo sarā possibile leggere il valore contenuto nello stesso
LEGGI_CODA
DECF
PUNTA_CODA, 0
;W:=(PUNTA_CODA - 1)
MOVWF FSR
MOVF
INDF,
0
MOVWF SORGENTE
RETURN
Questo frammento di programma restituisce dentro la variabile "SORGENTE" il valore A3 contenuto per l'appunto nella locazione B2h
In modo analogo si procede per la scrittura; si scrive dentro FSR l'indirizzo di memoria e dentro INDF il dato che si intende memorizzare:
INSERISCI
MOVF
PUNTA_POS, 0
MOVWF FSR
MOVF
SORGENTE, 0
MOVWF INDF
CALL
AGGIORNA_PUNTATORI
RETURN