Косвенная базовая адресация

При косвенной базовой (регистровой) адресации эффективный адрес операнда может находиться в любом из регистров общего назначения, кроме SP/ESP и ВР/ЕВР (это специальные регистры для работы с сегментом стека).

Синтаксически в команде этот режим адресации выражается заключением име­ни регистра в квадратные скобки.

К примеру, команда mov ax,[ecx] помещает в ре­гистр АХ содержимое слова по адресу сегмента данных со смещением, хранящимся в регистре ЕСХ. Так как содержимое регистра легко изменить в ходе работы про­граммы, данный способ адресации позволяет динамически назначить адрес опе­ранда для некоторой машинной команды. Это очень полезно, например, для орга­низации циклических вычислений и для работы с различными структурами данных типа таблиц или массивов.

 

Косвенная базовая адресация со смещением

Косвенная базовая (регистровая) адресация со смещением является дополнением предыдущего вида адресации и предназначена для доступа к данным с известным смещением относительно некоторого базового адреса. Этот вид адресации удобно использовать для доступа к элементам структур данных, когда смещение элемен­тов известно заранее на стадии разработки программы, а базовый (начальный) адрес структуры должен вычисляться динамически на стадии выполнения программы. Модификация содержимого базового регистра позволяет обращаться к одноимен­ным элементам различных экземпляров однотипных структур данных.

К примеру, команда mov ax,[edx+3h] пересылает в регистр АХ слово из области памяти по адресу, определяемому содержимым EDX + 3h.

Команда mov ax,mas[dx] пересылает в регистр АХ слово по адресу, определяемому содержимым DX плюс значение идентификатора mas (не забывайте, что транслятор присваивает каждо­му идентификатору значение, равное смещению этого идентификатора относитель­но начала сегмента данных).