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