Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
АССЕМБЛЕР.doc
Скачиваний:
6
Добавлен:
21.09.2019
Размер:
388.1 Кб
Скачать

7.Адресация, непоср. Операнды.

Для эффективного применения команд м.проца следует рассмотреть возможные способы адресации.

Под адресацией данных в языке ассемблера понимают способы обращения к используемым в командах операндам. Различают следующие основные способы описания операндов (и соответствующие способы адресации):

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

  • непосредственные операнды;

  • операнды в памяти;

  • адресацию строковых данных;

  • адресацию портов ввода-вывода.

8. Прямая адресация.

Прямой адрес – это литеральный адрес смещения переменной в памяти относительно любого базового сегмента. При прямом обращении к памяти фиксируется только адрес смещения. Прямая адресация осуществляется в пределах одного сегмента для сохранения или взятия величин из каких-либо переменных.

Например, mov x1,AL. х1 – переменная, метка. По данному адресу записывается 1 байт из регистра AL. mov CX, count – 2 байта записываются в регистр СХ. mov DS, AX – содержимое АХ записывается в регистр данных DS.

Существует два вида прямой адресации: относительная и абсолютная. При исп. относит. адресации задаётся в кач-ве операнда 1 байт, который рассматривается как смещение относительно текущей команды. При абс. адресации смещение записывается 2 байтами и представляет собой беззнаковое целое число.

9. Побічна адресация.

Адресация осущ. заданием адреса одного из операндов. Вместо обращения к переменной в памяти по имени можно использовать один из трёх регистров – bx, si, di в кач-ве указателя на данные в памяти. Поскольку для адресации различных областей памяти программа может изменять значения регистров, косвенная адресация позволяет одной команде оперировать многими переменными. Загрузив адрес смещения в соответствующий регистр, можно обращаться к данным, записанным в памяти с помощью след. команд: mov [bx],AL – записать содержимое AL по адресу, кот. содержится в регистре bx.

mov [bx],0 – при этой команде генерируется ошибка, для коррекции которой используются модификаторы: byte ptr, word ptr, dword ptr. Правильный вариант этой команды с учётом модификаторов: mov word ptr [bx],0. Модификаторы исп. и в тех случаях, когда разрядность операндов явно не может быть установлена.

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

Для косв. адресации со смещением исп. 2 регистра – bx, bp. Обращения к bx проводятся относительно сегмента данных, адресуемого ds. Ссылки на bp осущ. относительно стекового сегмента ss и обычно применяются для чтения и записи значений в стек. Для косв. адресации к области, адресуемой bx или bp, добавляется значение смещения, которое задаётся в байтах и может быть как положительным, так и отрицательным.

Например, mov [BX+2],AL либо mov 2[BX],AX, что эквивалентно.

11. Базово-індексна адресация.

Б.-и. адресация объединяет два регистра и добавляет необязательное значение перемещения для формирования обращения к памяти по составному смещению. Первым регистром должен быть либо bx, либо bp. Вторым регистром должен быть si или di. Смещения, начинающиеся с bx, определяются относительно сегмента данных ds, а смещения, начинающиеся с bp, - относительно сегмента стека ss.

Например: mov ax,[bx+si] – загрузить в ах слово из сегмента данных, mov ax,[bp+di] – загрузить в ах слово из сегмента стека. Можно менять порядок регистров. В любом из этих примеров можно добавлять необязательное значение перемещения: mov ax,[bx+si+5]; mov ax,[bp+di+5].

Б.-и. адресация является самым мощным методом обращения к памяти. С его помощью вы можете определить начальное смещение в bp или bx (возможно, адрес массива), добавить к нему значение индекса из si или di (возможно, определяющий эл-т массива), после чего прибавить значение перемещения (может быть для нахождения поля записи в этом заданном эл-те массива). Изменяя значения базового и индексного регистров, программа может адресовать в памяти сложные стр-ры данных.

12. Базово-індексна адресация со смещением.

При такой адресации исполнительный адрес определяется сложением содержимого базового регистра (ВХ или ВР), индексного регистра (SI, DI) и величины смещения. Как отмечалось выше, величина смещения является частью команды и может быть 8-битовым числом со знаком или 16-битовым числом без знака. За исполнительный адрес принимается перемещаемый адрес текущего сегмента данных или стекового сегмента в зависимости от того, какой из регистров используется - ВХ или ВР. Прикладные программы могут использовать префиксные команды, благодаря которым можно переприсвоить исполнительные адреса относительно других сегментов памяти. При базово-индексной адресации со смещением поле Mod представляет собой двоичное число 01 или 10 в зависимости от того, определяется ли смещение 8- или 16- битовым числом. Поле Rm представляется точно также, как и в случае базово-индексной адресации.