Normalment a les instruccions de programa que treballen sobre variables indiquem l'adreça de la variable corresponent Però en alguns casos ens pot interessar llegir o operar sobre unes variables consecutives. Amb el sistema d'adreçament normal (adreçament directe) necessitaríem fer servir una instrucció diferent per a cada posició de memòria. En aquests casos l'adreçament indirecte ens pot ser molt útil ja que ens permetrà que la mateixa instrucció pugui treballar amb diferents adreces de memòria de dades.
Per fer l'adreçament indirecte, cal tenir el punter d'adreçament indirecte (l'adreça de la variable) al registre FSR i posar com a adreça INDF. Així, si FSR ja conté el punter podrem guardar l'acumulador a l'adreça indirecta fent:
movwf INDF
D'aquesta manera podem fer servir la mateixa instrucció per accedir a diferents posicions de memòria, segons el valor que guardem a FSR. Això és molt pràctic per fer bucles que llegeixin o escriguin en posicions consecutives ja que posem l'adreça del primer element a FSR i després anem incrementant el valor a cada passada del bucle.
Si en un mateix programa féssim servir més d'un adreçament indirecte, caldria guardar el valor de FSR en passar d'una part de programa a l'altra.
La memòria de dades del PIC 16F690 té 512 bytes, per tant, cal una adreça de 9 bits per codificar totes les posicions de memòria. Atès que el registre FSR només és de 8 bits, cal un novè bit (IRP, a la paraula STATUS) per poder accedir a tots els bancs. Amb adreçament indirecte podem treballar indistintament amb dades dels bancs 0 i 1, només haurem d'activar IRP quan haguem d'accedir a dades del banc 2. Podeu trobar més informació sobre l'adreçament indirecte a l'apartat 2.4 del document de característiques del PIC 16F690.

Els registres STATUS, FSR i INDF són accessibles des de qualsevol banc.
El següent tros de programa mostra el funcionament de l'adreçament indirecte:
cblock 0x20 Valors:8 ; Vuit valors endc
... movlw Valors ; Copia a W l'adreça del primer byte de Valors movwf FSR ; Ho guarda al registre d'adreçament indirecte ... clrf INDF ; Esborra la posició 20h (Valors) incf FSR,f ; Incrementa FSR clrf INDF ; Esborra la posició 21h (Valors+1) ...
Fixem-nos que a la primera instrucció carreguem a l'acumulador l'adreça de la variable Valors, no el seu contingut ja que és l'adreça el que hem de posar a FSR. Si volguéssim carregar el valor de la variable Valors, faríem servir movf.

Aquesta obra d'Oriol Boix està llicenciada sota una llicència no importada Reconeixement-NoComercial-SenseObraDerivada 3.0.