В этом режиме адрес операнда образуется сложением двух
или, реже, большего количества регистров и, возможно, еще и адресного
смещения. Такой режим может использоваться для адресации массивов — один
регистр содержит базовый адрес массива, второй — индекс, откуда и название.
Иногда значение индексного регистра умножается на размер операнда, иногда
— нет.
На первый взгляд, ортогональные архитектуры должны испытывать определенные
сложности с-кодированием такой адресации: для этого нужно два регистровых
поля, а большинство остальных режимов довольствуются одним регистром.
Однако многие ортогональные архитектуры, например VAX, МС680хО, SPARC
реализуют этот режим, пусть иногда и с ограничениями.
Индексный режим адресации VAX
У VAX за операндом, указывающим индексный режим адресации и индексный
регистр, следует еще один байт, кодирующий режим адресации и регистр,
используемые для вычисления базового адреса (рис. 2.12). Идея разрешить
многократное указание индексного регистра в одном операнде, к сожалению,
не реализована.
Индексный режим адресации в системе
команд SPARC
SPARC позволяет использовать для вычисления адреса в командах LD, зт и
JMPL как сумму двух регистров, так и сумму регистра и 13-разрядного смещения.
Таким образом, эти команды реализуют либо косвенно-регистровый режим (если
используется смещение и оно равно 0), либо косвенно-регистровый режим
со смещением, либо базово-индексный режим без смещения. Это, конечно,
беднее, чем у CISC-процессоров, но жить с таким набором вполне можно.
Рис. 2.12. Индексный режим адресации VAX
Немало современных процессоров, впрочем, предлагают программисту реализовать такой режим с помощью нескольких команд и с использованием промежуточного регистра, в который следует поместить сумму базового и индексного регистров.