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