3. Способы адресации
3. Способы адресации
Перечислим и затем рассмотрим особенности основных видов адресации операндов в памяти:
1) прямую адресацию;
2) косвенную базовую (регистровую) адресацию;
3) косвенную базовую (регистровую) адресацию со смещением;
4) косвенную индексную адресацию со смещением;
5) косвенную базовую индексную адресацию;
6) косвенную базовую индексную адресацию со смещением.
Прямая адресация
Это простейший вид адресации операнда в памяти, так как эффективный адрес содержится в самой команде и для его формирования не используется никаких дополнительных источников или регистров. Эффективный адрес берется непосредственно из поля смещения машинной команды (см. рис. 20), которое может иметь размер 8, 16, 32 бит. Это значение однозначно определяет байт, слово или двойное слово, расположенные в сегменте данных.
Прямая адресация может быть двух типов.
Относительная прямая адресация
Используется для команд условных переходов, для указания относительного адреса перехода. Относительность такого перехода заключается в том, что в поле смещения машинной команды содержится 8-, 16– или 32-битное значение, которое в результате работы команды будет складываться с содержимым регистра указателя команд ip/eip. В результате такого сложения получается адрес, по которому и осуществляется переход.
Абсолютная прямая адресация
В этом случае эффективный адрес является частью машинной команды, но формируется этот адрес только из значения поля смещения в команде. Для формирования физического адреса операнда в памяти микропроцессор складывает это поле со сдвинутым на 4 бита значением сегментного регистра. В команде ассемблера можно использовать несколько форм такой адресации.
Но такая адресация применяется редко – обычно используемым ячейкам в программе присваиваются символические имена. В процессе трансляции ассемблер вычисляет и подставляет значения смещений этих имен в формируемую им машинную команду в поле «смещение в команде». В итоге получается так, что машинная команда прямо адресует свой операнд, имея, фактически, в одном из своих полей значение эффективного адреса.
Остальные виды адресации относятся к косвенным. Слово «косвенный» в названии этих видов адресации означает то, что в самой команде может находиться лишь часть эффективного адреса, а остальные его компоненты находятся в регистрах, на которые указывают своим содержимым байт modr/m и, возможно, байт sib.
Косвенная базовая (регистровая) адресация
При такой адресации эффективный адрес операнда может находиться в любом из регистров общего назначения, кроме sp/esp и bp/ebp (это специфические регистры для работы с сегментом стека). Синтаксически в команде этот режим адресации выражается заключением имени регистра в квадратные скобки []. К примеру, команда mov ах, [есх] помещает в регистр ах содержимое слова по адресу из сегмента данных со смещением, хранящимся в регистре есх. Так как содержимое регистра легко изменить в ходе работы программы, данный способ адресации позволяет динамически назначить адрес операнда для некоторой машинной команды. Это свойство очень полезно, например, для организации циклических вычислений и для работы с различными структурами данных типа таблиц или массивов.
Косвенная базовая (регистровая) адресация со смещением
Этот вид адресации является дополнением предыдущего и предназначен для доступа к данным с известным смещением относительно некоторого базового адреса. Этот вид адресации удобно использовать для доступа к элементам структур данных, когда смещение элементов известно заранее, на стадии разработки программы, а базовый (начальный) адрес структуры должен вычисляться динамически, на стадии выполнения программы. Модификация содержимого базового регистра позволяет обратиться к одноименным элементам различных экземпляров однотипных структур данных.
К примеру, команда mov ax,[edx+3h] пересылает в регистр ах слова из области памяти по адресу: содержимое edx + 3h.
Команда mov ax,mas[dx] пересылает в регистр ах слово по адресу: содержимое dx плюс значение идентификатора mas (не забывайте, что транслятор присваивает каждому идентификатору значение, равное смещению этого идентификатора относительно начала сегмента данных).
Косвенная индексная адресация со смещением
Этот вид адресации очень похож на косвенную базовую адресацию со смещением. Здесь также для формирования эффективного адреса используется один из регистров общего назначения. Но индексная адресация обладает одной интересной особенностью, которая очень удобна для работы с массивами. Она связана с возможностью так называемого масштабирования содержимого индексного регистра. Что это такое?
Посмотрите на рисунок 20. Нас интересует байт sib. При обсуждении структуры этого байта мы отмечали, что он состоит из трех полей. Одно из этих полей – поле масштаба ss, на значение которого умножается содержимое индексного регистра.
К примеру, в команде mov ax,mas[si*2] значение эффективного адреса второго операнда вычисляется выражением mas+(si)*2. В связи с тем, что в ассемблере нет средств для организации индексации массивов, то программисту своими силами приходится ее организовывать.
Наличие возможности масштабирования существенно помогает в решении этой проблемы, но при условии, что размер элементов массива составляет 1, 2, 4 или 8 байт.
Косвенная базовая индексная адресация
При этом виде адресации эффективный адрес формируется как сумма содержимого двух регистров общего назначения: базового и индексного. В качестве этих регистров могут применяться любые регистры общего назначения, при этом часто используется масштабирование содержимого индексного регистра.
Косвенная базовая индексная адресация со смещением
Этот вид адресации является дополнением косвенной индексной адресации. Эффективный адрес формируется как сумма трех составляющих: содержимого базового регистра, содержимого индексного регистра и значения поля смещения в команде.
К примеру, команда mov eax,[esi+5] [edx] пересылает в регистр еах двойное слово по адресу: (esi) + 5 + (edx).
Команда add ax,array[esi] [ebx] производит сложение содержимого регистра ах с содержимым слова по адресу: значение идентификатора array + (esi) + (ebx).
Более 800 000 книг и аудиокниг! 📚
Получи 2 месяца Литрес Подписки в подарок и наслаждайся неограниченным чтением
ПОЛУЧИТЬ ПОДАРОКДанный текст является ознакомительным фрагментом.
Читайте также
Необходимость в 64-битовой адресации
Необходимость в 64-битовой адресации Возможности доступа к большим адресным пространствам требуются многим приложениям. Можно было бы привести множество примеров, аналогичных тем, которые перечислены ниже.• Приложения для обработки изображений. Системы, использующие
Способы поиска
Способы поиска Поиск в каталогах не представляет затруднений и интуитивно понятен. Чтобы найти в них необходимую информацию (если, конечно, она там присутствует), достаточно всего лишь обладать здравым смыслом.Пусть, к примеру, вам необходимо найти сайт газеты «Труд».
Способы борьбы
Способы борьбы Однако не все так плохо. Бороться со спамом можно, и довольно эффективно. Ниже перечислены основные способы избежать захламления своего ящика бесполезными рекламными сообщениями.– Не делайте свой адрес достоянием широкой общественности, то есть не
Способы оплаты
Способы оплаты Поговорим о самом приятном в любой работе – о зарплате. Ведь деньги так или иначе являются основной целью вашего труда. Однако, к сожалению, их получение связано с некоторыми трудностями, возникающими вследствие больших расстояний между вами и
Способы борьбы
Способы борьбы Вирусы – это зло, а со злом нужно бороться. Однако прежде всего стоит вспомнить одну прописную истину – недопущение войны лучше любой победы. По этой причине в первую очередь необходимо минимизировать опасность попадания вирусов на ваш компьютер, а лишь
16.4. Система адресации данных
16.4. Система адресации данных Система адресации данных - это одна из самых существенных составных частей файловой системы. Именно система адресации позволяет находить нужный файл среди множества как пустых, так и занятых блоков на диске. В ext2fs система адресации
5.12 Примеры адресации
5.12 Примеры адресации В этом разделе мы познакомимся с несколькими примерами глобально уникальных адресов классов А, В и С. Позднее мы рассмотрим новый бесклассовый (classless) метод присваивания сетевых
26.1. Способы взаимодействия
26.1. Способы взаимодействия Процессы, как и люди, могут «общаться» между собой, то есть обмениваться информацией. В главе 3 мы бегло рассмотрели два средства межпроцессного взаимодействия (IPC, Inter-Process Communication); полудуплексные каналы (конвейеры) и сигналы, но в UNIX-системах
Способы заработка
Способы заработка Пенсионеру не так-то легко найти работу, и единственная, пожалуй, тому причина — возраст. Но в виртуальном пространстве возраст не имеет никакого значения. Здесь все равны: пионеры и пенсионеры, здоровые и инвалиды. Все зависит от умения и
Способы оплаты
Способы оплаты Что касается способов оплаты в интернет-магазине, то вы должны предоставить своим клиентам как можно больше возможностей оплатить заказ. Как показывает практика, чем больше выбор вариантов оплаты, тем выше конверсия (рис. 15). Если клиент не находит в
3. Способы адресации
3. Способы адресации Перечислим и затем рассмотрим особенности основных видов адресации операндов в памяти:1) прямую адресацию;2) косвенную базовую (регистровую) адресацию;3) косвенную базовую (регистровую) адресацию со смещением;4) косвенную индексную адресацию со
Способы передачи
Способы передачи Существуют два способа передачи потокового видео – последовательный (Progressive Streaming) и в реальном времени (Real-Time Streaming).При передаче последовательным способом качество изображения всегда лучше, поскольку видео воспроизводится с жесткого диска
Операция косвенной адресации: *
Операция косвенной адресации: * Предположим, мы знаем, что в переменной ptr содержится ссылка на переменную bah. Тогда для доступа к значению этой переменной можно воспользоваться операцией "косвенной адресации" (*). (Не путайте эту унарную операцию косвенной адресации с
Другие схемы открытой адресации
Другие схемы открытой адресации Хотя описанный класс хеш-таблиц был разработан для решения основной проблемы, возникающей при использовании схемы с открытой адресацией линейного зондирования (тенденции к кластеризации занятых ячеек), мы кратко рассмотрим несколько
Другие способы передачи
Другие способы передачи Если изображения в камере хранятся на карте памяти (CompactFlash, Secure Digital, Memory Stick и др.), то эту карту можно вставить в предусмотренный слот ноутбука и скачивать снимки непосредственно с нее. Для настольного же компьютера придется приобрести картовод (Card