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

Краткие теоретические сведения к лабораторной работы № 2

Косвенная адресация.Слово «косвенный» означает, что в самой команде может находиться лишь часть эффективного адреса, а остальные его компоненты находятся в регистрах. Используются следующие типы косвенной адресации:

Косвенная регистровая адресация.

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

Косвенная регистровая адресация со смещением

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

Косвенная индексная адресация со смещением.

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

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

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

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

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

Краткие теоретические сведения к лабораторной работы № 3.

Способы адресации.

Под адресацией данных на языке Ассемблера подразумевается спо­собы описания соответствующих адресов хранения операндов, исполь­зуемых в программе. Существуют следующие основные способы описа­ния операндов:

- регистр-регистр;

- регистр-память;

- память-регистр;

- непосредственный операнд-регистр;

- непосредственный операнд-память.

Для данного правила есть исключения, которые касаются:

- команд работы с цепочками, которые могут перемещать данные из памяти в память;

- команд работы со стеком, которые могут переносить данные из памяти в стек, также находящийся в памяти;

- команд типа умножения, которые кроме операнда, указанного в команде, используют еще м второй, неявный операнд.

Виды адресации.

Непосредственная адресация. В качестве операнда-источника данных (байты, слова, двойные слова) можно использовать константу, непосредственно записанную в команде МП. Если при записи команды используется константа меньшей размерности, чем приемник, то эта константа будет автоматически увеличина (с учетом знака) до нужной величины. MOV AX,327

Прямая адресация.При прямой адресации в команде указывается то смещение, которое соответствует началу размещения в памяти соответствующего операнда. Прямая адресация используется в тех случаях, когда явно известен адрес операнда. Ее можно использовать при работе с системными областями памяти. По умолчанию считается, что все операнды находятся в сегменте данных, поэтому при вычислении адреса используется текущее содержимое регистра DS. При использовании прямой адресации можно переопределять сегмент: MOV TEMP, DL;

содержимое регистра DL пересылается в ячейку памяти с именем TEMP.

Регистровая адресация.В качестве операндов (приемников, источников) можно использовать внутренние регистры МП: 8-разрядные регистры данных AH, AL,BH, BL, CH, CL, DH, DL, 16- разрядные регистры данных и индексные регистры АХ, ВХ, СХ, DX, SP, ВР, SI, DI, а для МП Intel 8086 и старше – 32- разрядные регистры данных и индексные регистры ЕАХ, ЕВХ, ЕСХ, ЕDX, ЕSP, ЕВР, ЕSI, ЕDI. Кроме того, можно использовать сегментные регистры СS, DS, SS, ES, а для МП Intel 8086 и старше – FS, GS.

MOV AH,BL