Конспект лекций по предмету "Программирование"


Косвенная базовая (регистровая) адресация

При такой адресации эффективный адрес операнда может находиться только в базовом регистре bx/ebx.

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

Косвенная базовая (регистровая) адресация со смещением
Этот вид адресации является дополнением предыдущего и предназначен для доступа к данным с известным смещением относительно некоторого базового адреса. Этот вид адресации удобно использовать для доступа к элементам структур данных, когда смещение элементов известно заранее, на стадии разработки программы, а базовый (начальный) адрес структуры должен вычисляться динамически, на стадии выполнения программы. Модификация содержимого базового регистра позволяет обратиться к одноименным элементам различных экземпляров однотипных структур данных.
К примеру, команда mov ax,[ebx+3h] пересылает в регистр ах слова из области памяти по адресу: содержимое ebx + 3h. Команда mov ax,mas[bx] пересылает в регистр ах слово по адресу: содержимое bx плюс значение идентификатора mas (не забывайте, что транслятор присваивает каждому идентификатору значение, равное смещению этого идентификатора относительно начала сегмента данных).

Косвенная индексная адресация со смещением
Этот вид адресации очень похож на косвенную базовую адресацию со смещением. Здесь для формирования эффективного адреса операнда-источника используется регистр si/esi, а операнда-приемника – регистр di/edi. Но индексная адресация обладает одной интересной особенностью, которая очень удобна для работы с массивами. Она связана с возможностью так называемого масштабирования содержимого индексного регистра. На рис. 8.1. нас интересует байт sib. При обсуждении структуры этого байта мы отмечали, что он состоит из трех полей. Одно из этих полей – поле масштаба ss, на значение которого умножается содержимое индексного регистра. К примеру, в команде mov ax,mas[esi*2] значение эффективного адреса второго операнда вычисляется выражением mas+(esi)*2. В связи с тем что в ассемблере нет средств для организации индексации массивов, программисту своими силами приходится ее организовывать. Наличие возможности масштабирования существенно помогает в решении этой проблемы, но при условии, что размер элементов массива составляет 1, 2, 4 или 8 байт.

Косвенная базовая индексная адресация
При этом виде адресации эффективный адрес формируется как сумма содержимого двух регистров общего назначения: базового и индексного. В качестве этих регистров могут применяться любые регистры общего назначения, при этом часто используется масштабирование содержимого индексного регистра. Например: mov eax,[esi][ebx]. В данном примере эффективный адрес второго операнда формируется из двух компонентов, (esi)+(ebx).

Косвенная базовая индексная адресация со смещением
Этот вид адресации является дополнением косвенной индексной адресации. Эффективный адрес формируется как сумма трех составляющих: содержимого базового регистра, содержимого индексного регистра и значения поля смещения в команде. К примеру, команда mov eax,[esi+5][ebx] пересылает в регистр еах двойное слово по адресу: (esi) + 5 + (ebx). Команда add ax,array[esi][ebx] производит сложение содержимого регистра ах с содержимым слова по адресу: значение идентификатора array + (esi) + (ebx).


Не сдавайте скачаную работу преподавателю!
Данный конспект лекций Вы можете использовать для создания шпаргалок и подготовки к экзаменам.

Поделись с друзьями, за репост + 100 мильонов к студенческой карме :

Пишем конспект самостоятельно:
! Как написать конспект Как правильно подойти к написанию чтобы быстро и информативно все зафиксировать.