Кіріспе
Оператор адрестерін өзгерту үшін қолданылатын CPU тіркелгіші. Компьютердің процессорындағы индекстік тіркелгіш – бағдарлама орындалған кезде оператор адрестерін көрсету үшін қолданылатын процессор тіркелгіші (немесе белгіленген жад орны). Ол тізбектер мен массивтер арқылы өтуге ыңғайлы. Сондай-ақ, оны циклдардың қайталануы мен сандарды сақтау үшін де пайдалануға болады. Кейбір архитектураларда жад блоктарын оқу/жазу үшін қолданылады. Архитектурасына қарай, ол арнайы индекстік тіркелгіш немесе жалпы мақсаттағы тіркелгіш болуы мүмкін. Кейбір командалар жиынтығы бірнеше индекстік тіркелгіштерді пайдалануға мүмкіндік береді; мұндай жағдайда қосымша команда өрістері қай индекстік тіркелгіштерді қолдану керектігін көрсете алады. Әдетте, индекстік тіркелгіштің мазмұны нақты деректердің (оператордың) "тиімді" адресін құру үшін тікелей адреске (команданың өзінің бір бөлігі болуы немесе басқа тіркелгіште сақталуы мүмкін) қосылады (кейбір жағдайларда одан кесіледі). Индекстік тіркелгішті тексеруге арналған арнайы командалар қарастырылған, және егер тексеру сәтсіз болса, индекстік тіркелгіш бірден тұрақты санға өсіріліп, әдетте циклдің басына тармақталады. Көп индекстік тіркелгіштерді анықтауға мүмкіндік беретін процессорлар әдетте мазмұндарын қосса, ал IBM компаниясының компьютерлерінде мазмұндары біріктірілген. Индекстік тіркелгіштер векторлық/массивтік операцияларды орындау үшін және коммерциялық деректерді өңдеуде жазбалардағы өрістер арасында навигация жасау үшін пайдалы болып көрінді. Екі жағдайдың да нәтижесінде индекстік тіркелгіштер пайдаланылған жад көлемін айтарлықтай азайтып, орындалу жылдамдығын арттырды.
An index register in a computer's CPU is a processor register (or an assigned memory location) used for pointing to operand addresses during the run of a program. It is useful for stepping through strings and arrays. It can also be used for holding loop iterations and counters. In some architectures it is used for read/writing blocks of memory. Depending on the architecture it may be a dedicated index register or a general purpose register. Some instruction sets allow more than one index register to be used; in that case additional instruction fields may specify which index registers to use. Generally, the contents of an index register is added to (in some cases subtracted from) an immediate address (that can be part of the instruction itself or held in another register) to form the "effective" address of the actual data (operand). Special instructions are typically provided to test the index register and, if the test fails, increments the index register by an immediate constant and branches, typically to the start of the loop. While normally processors that allow an instruction to specify multiple index registers add the contents together, IBM had a line of computers in which the contents were or'd together. Index registers has proved useful for doing vector/array operations and in commercial data processing for navigating from field to field within records. In both uses index registers substantially reduced the amount of memory used and increased execution speed.
Тарих
Ерте компьютерлерде тікелей емес адрестеудің қандай да бір түрі болмағандықтан, массив операцияларын орындау үшін нұсқаулық мекенжайын өзгерту қажет болды, бұл бірнеше қосымша бағдарламалық қадамдарды талап етті және компьютер жадының көп бөлігін пайдаланды, ол ерте дәуірдегі компьютерлік орналастыруларда (сондай-ақ екі онжылдықтан кейін алғашқы микрокомпьютерлерде) тапшы ресурс болды. Индекстік регистрлер, әдетте, алғашқы британдық компьютерлерде B сызықтары ретінде белгілі болды, кейбір машиналарда B регистрлері, ал басқаларында X регистрлері ретінде 1949 жылы британдық Манчестер Mark 1 компьютерінде алғаш рет қолданылды. Жалпы алғанда, индекстік регистрлер технологияның екінші буыны кезінде, шамамен 1954–1966 жылдары компьютерлердің стандартты бөлігіне айналды. IBM 700/7000 сериясындағы көптеген машиналарда олар болды, 1954 жылы IBM 704 бастап, бірақ IBM 650 және IBM 1401 сияқты кейбір кіші машиналарда олар қосымша опция болды. Индекстік регистрлері бар ертедегі «кіші машиналарға» 1960 жыл шамасындағы AN/USQ 17 және 1960 жылдардың басында Scientific Data Systems компаниясынан шыққан 9 сериялы нақты уақыт компьютерлері кірді. 1962 жылғы UNIVAC 1107 15 X регистріне ие болды, олардың төртеуі A регистрлері де болды. 1964 жылғы GE 635 8 арнайы X регистріне ие болды; алайда, ол нұсқаулық санағы арқылы немесе A немесе Q регистрінің жартысымен индекстеуге мүмкіндік берді. 1964 жылы ұсынылған Digital Equipment Corporation (DEC) PDP 6 және 1964 жылы жарияланған IBM System/360 арнайы индекстік регистрлерді қамтымады; оның орнына, олар сандық мәндер немесе мекенжайлар бола алатын жалпы мақсаттағы регистрлерге (PDP 6-да «аккумуляторлар» деп аталды) ие болды. PDP 6-да операндтың жад мекенжайы жалпы мақсаттағы регистрдің және 18 биттік ығыстырудың қосындысы болды, ал System/360-да екі жалпы мақсаттағы регистрдің және 12 биттік ығыстырудың қосындысы болды. PDP 6-ның PDP 10-ға сәйкес келетін мұрагерлері, IBM System/370 және System/360-ның кейінгі үйлесімді мұрагерлері, соның ішінде қазіргі z/Architecture, бірдей жұмыс істейді. 1969 жылғы Data General Nova және оның мұрагері Eclipse, сондай-ақ 1970 жылғы DEC PDP 11 мини-компьютерлері де Eclipse MV және VAX 32 биттік супермини-компьютерлерінің мұрагерлері сияқты жеке аккумуляторлар мен индекстік регистрлер емес, жалпы мақсаттағы регистрлерді (Nova және Eclipse-те «аккумуляторлар» деп аталды) ұсынды. PDP 11 және VAX-те операндтың жад мекенжайын есептеу кезінде кез келген регистрді пайдалануға болады; Nova, Eclipse және Eclipse MV-де тек 2 және 3 регистрлерді ғана пайдалануға болады. 1971 жылғы CDC STAR 100 256 64 биттік регистрлер тізіміне ие болды, олардың 9-ы сақталған. Көптеген компьютерлерден айырмашылығы, STAR 100 нұсқауларында тек регистрлік және операндтық өрістер болды, сондықтан регистрлер дәстүрлі индекстік регистрлерге қарағанда көрсеткіштер регистрлері ретінде көбірек қызмет етеді. 1972 жылы Intel 8008 тіркелім жұптары арқылы жанама адрестеуге мүмкіндік бергенімен, шын индекстік регистрі бар алғашқы микропроцессор 1974 жылы Motorola 6800 болды. 1975 жылы 8 биттік MOS Technology 6502 процессорында екі индекстік регистр «X» және «Y» болды. 1978 жылы Intel 8086, алғашқы x86 процессоры, «жалпы мақсаттағы» деп аталған сегіз 16 биттік регистрге ие болды, олардың барлығы көптеген операцияларда бүтін сандық деректер регистрлері ретінде пайдаланылуы мүмкін; олардың төртеуі, «SI» (көздік индекс), «DI» (мақсаттық индекс), «BX» (негізгі) және «BP» (негізгі көрсеткіш), сондай-ақ операндтың жад мекенжайын есептеу кезінде пайдаланылуы мүмкін, бұл осы регистрлердің бірі мен ығыстырудың қосындысы немесе «BX» немесе «BP», «SI» немесе «DI» және ығыстырудың қосындысы болды. 1979 жылғы Intel 8088 және 16 биттік Intel 80186, Intel 80188 және Intel 80286 ұрпақтары да сол сияқты жұмыс істеді. 1985 жылы i386, осы процессорлардың 32 биттік мұрагері, x86 архитектурасының IA 32 32 биттік нұсқасын ұсынды, сегіз 16 биттік регистрлерді 32 битке дейін кеңейтті, регистр атауының басына «E» әрпін қосты. IA 32-де операндтың жад мекенжайы сол сегіз регистрдің бірі, сол жеті регистрдің бірі (стек көрсеткіші екінші регистр ретінде рұқсат етілмейді) 1, 2, 4 немесе 8 еселенген және ығыстырудың қосындысы болды. 2003 жылы шыққан Advanced Micro Devices Opteron, x86 64 нұсқасын ұсынды, x86 64 нұсқасында жалпы мақсаттағы регистрлер 64 битке дейін кеңейтілді және тағы сегіз қосымша жалпы мақсаттағы регистрлер қосылды; операндтың жад мекенжайы - осы 16 регистрдің екеуінің қосындысы және ығыстыру. ARM архитектурасының 64 биттік нұсқасында 31 64 биттік жалпы мақсаттағы регистрлер, сонымен қатар стек-көрсеткіші және нөлдік регистр бар; жүктеу немесе сақтау нұсқаулығының жад мекенжайы 31 регистрдің кез келгенінің қосындысы және ығыстыру немесе басқа регистрдің қосындысы болды.