2.2.5. Адресация по базе со сдвигом

Теперь скомбинируем два предыдущих метода адресации. Следующая' команда mov ax,[bx+2]

помещает в регистр АХ слово, которое есть в сегменте, указанном в DS, со смеще­нием на два больше, чем число из ВХ. Так как слово занимает ровно 2 байта, эта команда поместила в АХ слово, непосредственно следующее за тем, которое было в предыдущем примере. Такая форма адресации используется в тех случаях, ког­да в регистре находится адрес начала структуры данных, а доступ надо осуще­ствить к какому-нибудь ее элементу. Еще один вариант применения адресации по базе со сдвигом — доступ из подпрограммы к параметрам, переданным в стеке, ис­пользуя регистр ВР (ЕВР) в качестве базы и номер параметра в качестве смеще­ния, что детально рассмотрено в разделе 4.3.2. Другие допустимые формы записи этого способа адресации:

mov ax,[bp]+2 mov

До процессора 80386 в качестве базового регистра разрешалось использовать только ВХ, ВР, SI или DI и сдвиг мог быть только байтом или словом (со' знаком). Начиная с 80386 и старше, процессоры Intel позволяют дополнительно использо­вать ЕАХ, ЕВХ, ЕСХ, EDX, EBP, ESP, ESI и EDI, также как и для обычной косвен­ной адресации. С помощью этого метода разрешается организовывать доступ к од­номерным массивам байтов: смещение соответствует адресу начала массива, а число в регистре - индексу элемента массива, который надо считать. Очевидно, что, если массив состоит не из байтов, а из слов, придется умножать базовый ре­гистр на два, а если из двойных слов - на четыре. Для этого предусмотрен специ­альный метод - косвенная адресация.