Nella programmazione e nell’architettura dei computer, un registro indice è un’area di memoria solitamente incorporata nell’unità di elaborazione centrale (CPU) da utilizzare come contatore molto veloce per scorrere gli indirizzi di memoria o per tenere traccia di operazioni come il looping. A seconda del tipo di architettura del sistema, un registro indice può essere un registro definito e dedicato tra altri registri del processore, oppure può essere un qualsiasi registro generico. Più comunemente, un registro indice contiene l’offset corrente di una posizione di memoria, con un altro registro che contiene l’indirizzo di base, quindi la combinazione dei due registri crea un indirizzo di memoria completo. Una delle funzioni speciali di un registro indice, quando uno è appositamente designato da una CPU, è che può essere utilizzato per scorrere facilmente gli indirizzi di memoria aumentando o decrementando secondo necessità in modo che strutture di dati come array e stack possano essere attraversate .
I registri indice sulla CPU di un computer sono aree di memoria di livello incredibilmente basso che di solito sono direttamente accessibili solo da un programmatore attraverso l’uso del linguaggio assembly o un linguaggio di programmazione di basso livello simile. In alcuni dei tipi più comuni di processori, due registri separati sono definiti come registri indice, vale a dire i registri indice sorgente (SI) e indice destinazione (DI). Altri processori non hanno specificamente registri indice o operatori di supporto che li richiedono, il che significa che è possibile utilizzare qualsiasi registro generico della dimensione appropriata.
Uno degli usi più frequenti di un registro indice è quello di fungere da puntatore a una posizione di memoria che contiene un flusso di dati a cui è necessario accedere in sequenza. Un esempio può essere visto quando si utilizza un array di dati in cui tutti gli elementi sono disposti consecutivamente in memoria. Se il registro indice viene utilizzato per accedere a un array, può contenere il valore corrispondente dell’offset dell’elemento a cui si sta attualmente accedendo quando viene aggiunto a un altro registro che contiene un indirizzo di base, come il registro del segmento di dati. Ciò può semplificare molto il completamento di procedure come la copia del contenuto di una stringa con terminazione null da una posizione di origine a una stringa di destinazione.
Un altro uso di un registro indice può essere quello di contenere informazioni su loop e altri contatori. Alcune architetture di sistema preferiscono utilizzare il registro indice per contenere il numero di iterazioni che si sono verificate in un ciclo, sebbene altre volte sia possibile utilizzare qualsiasi registro. Inoltre, alcune istruzioni di assemblaggio si basano specificamente sui registri di indice di origine e destinazione per eseguire determinate operazioni, come la lettura o la scrittura della memoria a blocchi, come potrebbe essere fatto per inviare informazioni a uno schermo.