Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Assembler_LAB_02.docx
Скачиваний:
13
Добавлен:
02.02.2015
Размер:
34.22 Кб
Скачать
      1. Способы адресации к памяти

Для обращения к оперативной памяти и выборки данных из нее можно использовать следующие методы доступа: неявный; прямой; косвенный.

Неявная адресация предполагает отсутствие адресной части в коде. При этом сама операция определяет источники и/или приемники данных. Примером таких команд являются команды возврата из процедур RET или установки флагов CLI и т.п.

Прямая адресация позволяет задать в коде команды адреса источника и/или приемника информации.

Например:

MOV AX, [DIGIT]

имеет прямой адрес операндов - регистра AX и ячейки памяти DIGIT.

Косвенная адресация предполагает наличие в коде команды адреса, который задает адрес размещения данных.

Несмотря на увеличение длины кода команды и увеличение времени обращения к данным этот способ адресации является самым гибким.

Процессор формирует физический адрес на основе объединения содержимого сегментного регистра и адреса в соответствии с режимом адресации, используемой в команде. Содержимое сегментного регистра сдвигается на четыре разряда влево (освободившиеся разряды заполняются нулями) и складывается с адресом в коде команды. Так как разрядность сегментного регистра и адреса команды представляет собой шестнадцатиразрядное число, формируется 20 разрядный адрес оперативной памяти. Полученный физический адрес обеспечивает доступ к 1Мб оперативной памяти. При неизменном значении сегментного регистра может быть обеспечена адресация 64Кб (один сегмент оперативной памяти).

Процессор обеспечивает следующие режимы адресации к памяти:

непосредственная;

неявная;

прямая;

косвенно-регистровая;

индексная или базовая со смещением;

индексно-базовая;

индексно-базовая со смещением;

индексная или базовая со смещением и масштабированием;

индексно-базовая и масштабированием;

индексно-базовая со смещением и масштабированием;

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

MOV AX,123

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

MOV [DIGIT],123

позволяет загрузить число 123 в ячейку, адрес которой соответствует имени переменной DIGIT. Транслятор с языка ассемблера позволяет в команде с прямой адресацией применять операции сложения и вычитания с константой. Например, если адрес MAS соответствует массиву байтовых данных, загрузка 4-го элемента может быть осуществлена командой

MOV [MAS+4],12

Косвенная регистровая адресация используется для обращения к ячейке памяти, адрес которой хранится в регистре. В качестве адресного регистра могут выступать регистры BX, SI, DI, BР и SР (регистры BР и SР по умолчанию используют сегмент стека, а остальные сегмент данных). Команда:

MOV [SI],AX

загружает ячейку, адрес которой содержится в SI , значение аккумулятора. Квадратные скобки указывают на наличие косвенной адресации.

Индексная или базовая со смещением обеспечивает использование константы для определения действительного адреса ячейки. При этом способе можно применяются регистры BX, SI, DI и BР. Отличие индексной адресации от базовой состоит в иной интерпретации содержимого адресных регистров. В первом случае содержимое регистра рассматривается как индекс (работа с массивами), во втором - как база (смещение относительно начала сегмента).

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

Индексно-базовая адресация обеспечивает формирование адреса из двух частей, которые хранятся в регистрах. Один из них содержит базу, а второй индекс (смещение). На рисунках 1.1 и 1.2 показаны варианты индексно-базовой адресации.

Индексно-базовая адресация обычно используется при формировании адресов элементов массивов данных в подпрограммах, когда адреса массива передается через параметр (адрес начала массива передается через стек).

Индексно-базовая адресация обычно используется при формировании адресов элементов массивов данных в подпрограммах, когда адреса массива передается через параметр (адрес начала массива передается через стек).

При таком способе адресации базовый регистр хранит значение имеющее смысл базы (смещение относительно начала сегмента) , а индексный регистр - индекс (смещение относительно начала размещения данных). База рассматривается как целое беззнаковое, индекс может быть знаковым или беззнаковым числом.

Индексно-базовая адресация со смещением (рисунок 1.2.) используется при адресации к данным, имеющим сложную внутреннюю структуру. Например, для обращения к многомерным массивам или к полям массива записей. Эффективный адрес формируемый процессором состоит из трех компонент - константы ( задается в команде), базы и индекса. Для задания адреса используются те же регистры, что и в индексно-базовой адресации.

Компонента MAS задает смещение относительно начала сегмента до массива данных, базовый регистр - смещение элемента в массиве, а индексный регистр - смещение до необходимого поля относительно начала размещения элемента.

При использовании индексно-базового и индексно-базового со смещением способа адресации может возникать ситуация, когда сумма компонентов превышает размер сегмента. В этом случае процессор отбрасывает разряд переноса и формирует 16-ти разрядный эффективный адрес. Поэтому в индексно-базовой адресации со смещением базовый и индексный регистры могут иметь смысл отрицательного числа.

Рисунок.1.2 - Базово-индексный метод адресации со смещением.

Процессор 80386 позволяет использовать масштабирование индексного регистра в режимах с косвенной адресацией (рисунок 1.3.). При масштабировании значение индексного регистра умножается на 2, 4, 8 и полученное значение используется для формирования адреса.

В качестве индексного регистра может быть использован любой из 32-разрядных регистров процессора.

Начало База Смещение Индекс*4

сегмента

MOV [MAS +EBX+ESI*4],AX

Рисунок.1.3. Режим адресации с масштабированием.

Режимы адресации с масштабированием удобны для работы с массивами числовых данных.

Режим масштабирования требует разрешения использования набора команд защищенного режима и расширенного набора регистров. Сформированный адрес не должен превышать 1Мб. Разрешение набора команд расширенного режима осуществляется директивой - Р386 ( в режиме IDEAL или .386 в режиме MASM).

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]