Inom datorprogrammering och datorarkitektur är ett indexregister ett minnesområde som vanligtvis är inbyggt i den centrala processorenheten (CPU) för att användas som en mycket snabb räknare för att gå igenom minnesadresser eller för att hålla reda på operationer såsom looping. Beroende på typen av systemarkitektur kan ett indexregister vara ett definierat och dedikerat register bland andra processorregister, eller det kan vara vilket allmänt register som helst. Vanligtvis håller ett indexregister den aktuella offseten för en minnesplats, med ett annat register som håller basadressen, så kombinationen av de två registren skapar en komplett minnesadress. En av de speciella funktionerna i ett indexregister, när det är speciellt utsett av en CPU, är att det kan användas för att enkelt gå igenom minnesadresser antingen genom att ökas eller minskas efter behov så att datastrukturer som arrayer och stackar kan korsas .
Indexregistren på en dators CPU är oerhört lågnivåområden av minne som vanligtvis bara är direkt åtkomliga av en programmerare genom att använda assemblerspråk eller liknande lågnivåprogrammeringsspråk. I några av de vanligare typerna av processorer definieras två separata register som indexregister, nämligen källindex (SI) och destinationsindex (DI). Andra processorer har inte specifikt indexregister eller stödjande operatörer som kräver dem, vilket innebär att alla allmänna register av lämplig storlek kan användas.
En av de vanligaste användningsområdena för ett indexregister är att fungera som en pekare till en minnesplats som innehåller en ström av data som måste nås sekventiellt. Ett exempel kan ses när man använder en array av data där alla element är ordnade i följd i minnet. Om indexregistret används för att få åtkomst till en array, då kan det innehålla motsvarande värde för förskjutningen av elementet som för närvarande accessas när det läggs till ett annat register som har en basadress, såsom datasegmentregistret. Detta kan göra det mycket enkelt att slutföra procedurer som att kopiera innehållet i en nollterminerad sträng från en källplats till en destinationssträng.
En annan användning för ett indexregister kan vara att hålla information om slingor och andra räknare. Vissa systemarkitekturer föredrar att använda indexregistret för att hålla antalet iterationer som har inträffat i en loop, även om andra gånger vilket register som helst kan användas. Dessutom förlitar sig vissa monteringsinstruktioner specifikt på käll- och destinationsindexregister för att utföra vissa operationer, såsom läsning eller skrivning av blockminne, vilket kan göras för att skicka information till en skärm.