Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
met.doc
Скачиваний:
14
Добавлен:
30.04.2019
Размер:
1.92 Mб
Скачать

Непосредственная адресация

В этом режиме процессор выбирает данные непосредственно из самого кода команды. Этот режим адресации применяется для задания константных значений в качестве операнда – источника данных (только в двухадресных командах). При этом разрядность непосредственного операнда определяется разрядностью операнда – приемника данных.

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

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

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

Обычно прямая адресация применяется, если операндом является метка (имя ячейки памяти). Ассемблер, встроенный в debug, не поддерживает метки, и при применении прямой адресации необходимо прямо указывать смещение конкретной ячейки памяти. Чтобы различать непосредственные данные и исполнительный адрес последний берется в квадратные скобки. Например, команда MOV AX,[0034h] в отличие от предыдущего случая помещает в регистр AX не константу 0034h, а содержимое слова, находящегося по адресу DS:0034h.

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

Как и в случае прямой адресации, операнд, имеющий косвенную адресацию располагается в памяти, однако исполнительный адрес операнда находится не в коде команды, а в одном из базовых или индексных регистров: BX, BP, SI и DI. При вычислении физического адреса операнда процессор использует содержимое сегментного регистра DS, если исполнительный адрес располагается в BX, SI, либо DI, и содержимое сегментного регистра SS, если исполнительный адрес находится в регистре BP.

Чтобы различать регистровую и косвенную адресацию, при косвенной адресации имя регистра заключается в квадратные скобки. Например, команда MOV [BX],BX, в которой первый операнд имеет косвенную адресацию, а второй регистровую, помещает содержимое регистра BX в ячейку памяти с адресом DS:BX.

Адресация по базе

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

Данный режим адресации удобно использовать при доступе к структурированным записям данных, расположенным в разных областях памяти. В этом случае базовый адрес записи помещается в базовый регистр и доступ к ее отдельным элементам осуществляется по их сдвигу относительно базы. А для доступа к разным записям одной и той же структуры достаточно соответствующим образом изменить содержимое базового регистра. Например, команда MOV byte ptr [BP + 4],3Fh, в которой первый операнд имеет адресацию по базе, а второй непосредственную адресацию, помещает значение константы 3Fh в байт, имеющий адрес SS:BP + 4h. Для указания того, что в данном случае мы работаем именно с байтами, используется префикс byte ptr (word ptr префикс используется для указания того, что действия производятся над словами). Первый операнд этой команды можно трактовать как поле некоторой записи, располагаемой в сегменте стека. Базовый исполнительный адрес этой записи размещен в регистре BP, а сдвиг поля относительно этой базе, равный 4h, размещен в коде команды.

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