Індексний регістр — регістр процесора, у якому вказується адреса операнда під час виконання програми. Можуть використовуватися при операціях над векторами або масивами.
Вміст індексного регістра додається (а у деяких випадках віднімається) до адреси, закодованої у самій інструкції. Таким чином отримується так звана ефективна адреса даних. Як правило процесор містить спеціальні команди для перевірки індексних регістрів, а за результатами перевірки здійснюються які-небудь дії (наприклад, збільшення чи зменшення значення індексного регістра, перехід за умовою тощо). У деяких процесорних архітектурах присутні додаткові індексні регістри; у цьому випадку їх вибір здійснюється додатковими бітовими полями у кодуванні інструкції. Якщо процесор має команди, де присутні два і більше індексних регістри, зазвичай[де?] їх вміст складається, проте деякі комп'ютери IBM замість складання виконували операцію OR над індексними регістрами.
У ранніх комп'ютерах, що не мали ніяких форм непрямої адресації, операції на масивах даних вимагали написання коду, що модифікує сам себе. Таке програмування, що змінювало поля адрес у машинних інструкціях, було досить незручним, і крім того, вимагало додаткової пам'яті, яка у часи перших комп'ютерів була вкрай обмежена.:77
Реалізації у деяких процесорах Редагувати
Мала електронна обчислювальна машина Редагувати
Унікальна команда складання команд малої електронної обчислювальної машини (1950 р.) додавала число до команди та цим забезпечувалась динамічна модифікація програми. Комірки пам'яті, в якій зберігалося ці числа, виконували роль індексних регістрів, що дозволяло при циклуванні звертатися до даних (елементів масивів) у послідовно розміщених комірках пам'яті.
Окрім цього в цих комірках можна будо визначати числові значення, які відповідали довільним адресам оперативної пам'яті. Це дозволило перед виконанням команди визначати адресу за якими знаходяться потрібні значення або адресу підпрограми, яку слід викликати. Це надало можливість використати опосередковану адресацію 2-ого рангу (вказівники) до даних та до підпрограм.
IBM 7094 Редагувати
Дана машина мала 36-бітний формат машинної інструкції, з яких 15 розрядів відводилося на адресу, а три спеціальних розряди називалися «теґ» (англ. tag), і слугували саме для вибору одного з семи індексних регістрів. Значення індексного регістра віднімалося від адреси, і отримана адреса ставала «ефективною адресою» операнда.
Z80 Редагувати
Мікропроцесор Zilog Z80, на відміну від Intel 8080, має два 16-розрядні індексні регістри IX і IY, що вибираються спеціальними префіксами до коду операції (DD і FD відповідно). Адресація за індексним регістром може здійснюватися з 8-розрядним зміщенням (англ. displacement) або без нього. Наприклад: LD B,(IX+9)
, або LD (IY),C
.
Недокументованою є можливість застосування даних префіксів коду операції (DD і FD) також для однобайтних регістрів — «половинок» IX і IY (за аналогією з регістрами H і L, що утворюють 16-розрядну пару HL).
Intel 8086 Редагувати
У процесорах Intel 8086 і сумісних присутні індексні регістри SI і DI. У випадку так званої «базово-індексної адресації» до індексного регістра може додаватися також значення регістра BX. Приклади: mov ax,[bx+si]
; mov [bx+di+9],dl
Джерела Редагувати
- IBM 709 Reference Manual, Form A22-6501-0, 1958, p. 12
- ↑ . Fifth Edition (англ.). IBM. 21 жовтня 1966. A22-6703-4. Архів оригіналу за 26 вересня 2019. Процитовано 9 грудня 2019.
- (англ.). 1960. A24-1403-4. Архів оригіналу за 9 грудня 2019. Процитовано 9 грудня 2019.
- Лебедев, С.А.; Дашевський, Л.Н.; Шкабара, Е.А. (1952). (рос.). Москва: Академия наук СССР. с. 162. Архів оригіналу за 23 липня 2021. Процитовано 23 липня 2021.
- (англ.). Архів оригіналу за 25 грудня 2019. Процитовано 10 грудня 2019.
- Bot, Jacco J. T. . Home of the Z80 CPU (англ.). Архів оригіналу за 15 грудня 2019. Процитовано 10 грудня 2019. «If an opcode works with the registers HL, H or L then if that opcode is preceded by #DD (or #FD) it works on IX, IXH or IXL (or IY, IYH, IYL), with some exceptions. The exceptions are instructions like LD H,IXH and LD L,IYH.»