Адресация памяти
Адресация — осуществление ссылки (обращение) к устройству или элементу данных по его адресу [1] ; установление соответствия между множеством однотипных объектов и множеством их адресов; метод идентификации местоположения объекта [2] .
Содержание
Методы адресации [2]
Адресное пространство
- Простая (англ. flat addressing ) — указание объекта с помощью идентификатора или числа, не имеющего внутренней структуры.
- Расширенная (англ. extended addressing ) — доступ к запоминающему устройству с адресным пространством, бо́льшим диапазона адресов, предусмотренного форматом команды.
- Виртуальная (англ. virtual addressing ) — принцип, при котором каждая программа рассматривается как ограниченное непрерывное поле логической памяти, а адреса этого поля — как виртуальные адреса.
- Ассоциативная (англ. associative addressing ) — точное местоположение данных не указывается, а задаётся значение определённого поля данных, идентифицирующее эти данные (см.: Ассоциативная память).
Исполнение программ
- Статическая (англ. static addressing ) — соответствие между виртуальными и физическими адресами устанавливается до начала и не меняется в ходе выполнения программы.
- Динамическая (англ. dynamic addressing ) — преобразование виртуальных адресов в физические осуществляется в процессе выполнения программы. Программа при этом не зависит от места размещения в физической памяти и может перемещаться в ней в процессе выполнения.
Кодирование адресов
- Явная (англ. explicit addressing ) — адресация путём явного задания адресов в программе.
- Неявная (англ. implied addressing ) — один или несколько операндов или адресов операндов находятся в фиксированных для данной командырегистрах или ячейках памяти и не требуют явного указания в команде.
- Абсолютная (англ. absolute addressing ) — адресная часть команды содержит абсолютный адрес.
- Символическая (англ. symbolic addressing ) — адресная часть команды содержит символический адрес.
Вычисление адресов
- Непосредственная, прямая (англ. immediate (direct) addressing ) — адресная часть команды содержит непосредственный (прямой) адрес; адресация путём указания прямых адресов.
- Косвенная (англ. indirect addressing ) — адресная часть команды содержит косвенный адрес; адресация посредством косвенных адресов.
- Регистровая (англ. register addressing ) — задание адресов операндов в регистрах.
- Базисная (англ. basic addressing ) — вычисление адресов в машинных командах относительно содержимого регистра, указанного в качестве базового.
- Базовая (англ. base-displacement addressing ) — схема вычисления исполнительного адреса, при которой этот адрес является суммой базового адреса и смещения.
- Относительная (англ. relative addressing ) — адресная часть команды содержит относительный адрес.
- Индексная (англ. indexed addressing ) — формирование исполнительного адреса осуществляется путём добавления к базовому адресу содержимого индексного регистра.
- Автодекрементная, автоинкрементная (англ. autodecremental, autoincremental addressing — содержимое регистра индекса изменяется (уменьшается или увеличивается) на некоторое число.
- Постдекрементная, предекрементная, постинкрементная, преинкрементная — автодекрементные и автоинкрементные адресации, при которых уменьшение/увеличение происходит после/до выборки операнда.
- Самоопределяющаяся (англ. self-relative addressing ) — адресная часть команды содержит самоопределяющийся адрес.
- Адресация относительно счётчика команд (англ. program counter relative addressing ) — адреса в команде указываются в виде разности исполнительных адресов и адреса исполняемой команды. Такой способ адресации не требует настройки (см. также: Позиционно-независимый код).
Способы адресации
Подразумеваемый операнд
В команде может не содержаться явных указаний об операнде; в этом случае операнд подразумевается и фактически задается кодом операции команды.
Подразумеваемый адрес
В команде может не содержаться явных указаний об адресе участвующего в операции операнда или адреса, по которому должен быть размещен результат операции, но этот адрес подразумевается.
Непосредственная адресация
В команде содержится не адрес операнда, а непосредственно сам операнд. При непосредственной адресации не требуется обращения к памяти для выборки операнда и ячейки памяти для его хранения. Это способствует уменьшению времени выполнения программы и занимаемого ею объёма памяти. Непосредственная адресация удобна для хранения различного рода констант.
Прямая адресация
Адрес указывается непосредственно в виде некоторого значения, все ячейки располагаются на одной странице. Преимущество этого способа в том, что он самый простой, а недостаток — в том, что разрядность регистров общего назначения процессора должна быть не меньше разрядности шины адреса процессора.
Относительная (базовая) адресация
При этом способе адресации исполнительный адрес определяется как сумма адресного кода команды и базового адреса, как правило хранящегося в специальном регистре — регистре базы.
Относительная адресация позволяет при меньшей длине адресного кода команды обеспечить доступ к любой ячейке памяти. Для этого число разрядов в базовом регистре выбирают таким, чтобы можно было адресовать любую ячейку оперативной памяти, а адресный код команды используют для представления лишь сравнительно короткого «смещения». Смещение определяет положение операнда относительно начала массива, задаваемого базовым адресом.
Укороченная адресация
В адресном поле командного слова содержатся только младшие разряды адресуемой ячейки. Дополнительный указательный регистр.
- Адресация с регистром страницы является примером сокращённой адресации. При этом вся память разбивается на блоки-страницы. Размер страницы диктуется длиной адресного поля.
Регистровая адресация
Регистровая адресация является частным случаем укороченной. Применяется, когда промежуточные результаты хранятся в одном из рабочих регистров центрального процессора. Поскольку регистров значительно меньше чем ячеек памяти, то небольшого адресного поля может хватить для адресации.
Косвенная адресация
Адресный код команды в этом случае указывает адрес ячейки памяти, в которой находится адрес операнда или команды. Косвенная адресация широко используется в малых и микроЭВМ, имеющих короткое машинное слово, для преодоления ограничений короткого формата команды (совместно используются регистровая и косвенная адресация).
Адресация слов переменной длины
Эффективность вычислительных систем, предназначенных для обработки данных, повышается, если имеется возможность выполнять операции со словами переменной длины. В этом случае в машине может быть предусмотрена адресация слов переменной длины, которая обычно реализуется путем указания в команде местоположения в памяти начала слова и его длины.
Стековая адресация
Стековая память, реализующая безадресное задание операндов, особенно широко используется в микропроцессорах и Мини-ЭВМ.
Автоинкрементная и автодекрементная адресации
Поскольку регистровая косвенная адресация требует предварительной загрузки регистра косвенным адресом из оперативной памяти, что связано с потерей времени, такой тип адресации особенно эффективен при обработке массива данных, если имеется механизм автоматического приращения или уменьшения содержимого регистра при каждом обращении к нему. Такой механизм называется соответственно автоинкрементной и автодекрементной адресацией. В этом случае достаточно один раз загрузить в регистр адрес первого обрабатываемого элемента массива, а затем при каждом обращении к регистру в нём будет формироваться адрес следующего элемента массива.
При автоинкрементной адресации сначала содержимое регистра используется как адрес операнда, а затем получает приращение, равное числу байт в элементе массива. При автодекрементной адресации сначала содержимое указанного в команде регистра уменьшается на число байт в элементе массива, а затем используется как адрес операнда.
Автоинкрементная и автодекрементная адресации могут рассматриваться как упрощенный вариант индексации — весьма важного механизма преобразования адресных частей команд и организации вычислительных циклов, поэтому их часто называют автоиндексацией.
Индексация
Для реализуемых на ЭВМ методов решения математических задач и обработки данных характерна цикличность вычислительных процессов, когда одни и те же процедуры выполняются над различными операндами, упорядоченно расположенными в памяти. Поскольку операнды, обрабатываемые при повторениях цикла, имеют разные адреса, без использования индексации требовалось бы для каждого повторения составлять свою последовательность команд, отличающихся адресными частями.
Программирование циклов существенно упрощается, если после каждого выполнения цикла обеспечено автоматическое изменение в соответствующих командах их адресных частей согласно расположению в памяти обрабатываемых операндов. Такой процесс называется модификацией команд, и основан на возможности выполнения над кодами команд арифметических и логических операций.
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).
Данный текст является ознакомительным фрагментом.
Продолжение на ЛитРес
Читайте также
Необходимость в 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
Способы адресации
Система адресации обеспечивает в МП устройствах доступ к операндам, хранящимся в устройствах памяти, внутренних программно- доступных регистрах и внешних устройствах через порты ввода/вывода. Длина формата команды (общее количество бит в коде команды) определяет скорость выполнения команды и зависит от способа адресации операндов. Способы адресации играют большую роль в организации управления ходом выполнения программы, во многом определяют скорость обработки информации. Существуют следующие основные способы адресации:
Прямая адресация – исполнительный адрес размещается в адресном поле команды. В этом способе непосредственно используется счетчик команд и аккумулятор МП. При прямой адресации содержимое счетчика команд передается на ША и из адресуемой ячейки выбирается очередная команда, поступающая в устройство управления МП. С помощью прямой адресации в АЛУ может вызываться и операнд. Для этого на ША передается адрес ячейки памяти, содержащийся в команде. При необходимости изменения последовательного порядка выполнения программы адресуется ячейка памяти, содержащая адрес условного или безусловного перехода. Команда, содержащая прямой адрес, занимает 2-3 ячейки памяти, что соответственно требует и 2-3 обращений к памяти. Еще одно обращение может потребоваться для непосредственного вызова операнда.
С использованием прямой адресации могут быть загружены только аккумулятор и регистры выделенные для хранения косвенного адреса (в МП типа К580, i — 8080 и 8085 это регистровая пара Н). В современных микроконтроллерах для косвенной адресации обычно используется несколько регистровых пар.
Пример: LDA 0A00— эта команда загружает аккумулятор (регистр А) содержимым ячейки памяти 0А00. Формат этой команды:
3A 0A Код операции LDA Младший байт адреса Старший байт адреса Преимущества этого способа адресации – простота и наглядность, не требуется вычисление исполнительного адреса.
Недостаток – низкая скорость обработки информации, кроме того, во многих микропроцессорных системах для поля адреса в формате команды выделяется небольшое число битов, что ограничивает доступный для данного способа объем адресного пространства памяти.
Непосредственная адресация— данные включены в команду и собственно обращения к памяти при этом способе загрузки регистров не требуется. Команда вместо указания адреса операнда содержит этот операнд непосредственно. Непосредственная адресация используется при операциях с константами, исполнение команд с непосредственной адресацией отличается быстротой.
Пример: MVI C D3— эта команда загружает регистр С значением D3 (число представлено в шестнадцатеричном коде, т.е. является 8- разрядным двоичным числом).
Косвенная адресация– адресное поле команды указывает не адрес операнда, а лишь адрес ячейки, в которой хранится косвенный адрес, по которому можно получить операнд. В МП косвенная адресация обычно является неявной регистровой. В этом случае команда предписывает выполнить операцию над операндом, адрес которого содержится в регистрах общего назначения (обычно для этого выделяются определенные регистры блока РОН). Так, команда MOV REG,M загружает любой регистр из ячейки памяти, адрес которой содержится в регистровой паре H,L. Команда LDAX загружает аккумулятор с использованием адреса, содержащегося в регистровой паре B или D (используя регистры B или D можно осуществить косвенную загрузку только аккумулятора).
Пример: MOV D,M— эта команда загружает регистр D из ячейки памяти, адрес которой содержится в регистрах H,L. Отметим, что логически для процессора ячейка памяти с адресом, содержащимся в регистрах H,L эквивалентна регистру с индексом М (ячейку памяти с этим адресом называют регистром М. Естественно, адрес этой ячейки памяти меняется с изменением содержимого регистров H,L, а сам "регистр М" физически находится вне процессора).
Преимущество косвенной адресации в том, что косвенный адрес операнда содержит больше битов, чем число битов в адресном поле команды, т.е. доступен больший объем адресного пространства памяти. Недостатком является увеличение времени для извлечения операнда по сравнению со способом прямой адресации.
Относительная индексная адресация (автоинкрементная и автодекрементная) – базовый исполнительный адрес вычисляется так же, как и при регистровой косвенной адресации, а следующие исполнительные адреса получаются увеличением или уменьшением текущего адреса операнда на определенную величину после каждой обработки адреса. Обычно такая адресация используется при обработке массивов данных. В этом случае список данных представляется как совокупность индексных операндов. Операнды с индексами помещаются в соседних ячейках памяти. Для организации доступа к этим ячейкам памяти используются индексные регистры аналогичные в данном случае счетчику команд. Для двумерного массива истинный адрес
ИА = [базовый адрес] + (содержимое индексных регистров)
Для перебора операндов с индексами осуществляется автоиндексация, т.е. добавление к содержимому регистров плюс или минус единицы. Разновидностью автоиндексации является стековая адресация. В этом случае автоиндексный регистр является указателем стека, а область памяти им адресуемая, – стеком. Принцип стековой адресации заключается в следующем: после каждой засылки в стек, содержимое указателя стека увеличивается, а после каждого изъятия из стека — уменьшается на единицу.
Относительная адресация– исполнительный адрес получается сложением адресного поля команды с содержимым базового регистра процессора. Это сложение производится в специальном сумматоре. Относительная адресация применяется в командах перехода.
Страничная адресация– память делится на ряд страниц одинаковой длины. Адресация страниц осуществляется по содержимому программного счетчика или регистра страниц. Адресация памяти внутри страниц производится адресом, который содержится в команде.
Обращение к подпрограммам.Ряд процедурв ЭВМ часто используется различными программами или одной и той же программой многократно. Такие процедуры могут быть стандартизированы и оформлены в виде подпрограмм.
В этом случае вся программа может быть представлена в виде объединения основной программы и подпрограмм. Обращение к подпрограмме происходит из основной программы.
Перед обращением к подпрограмме необходимо запомнить адрес возврата в основную программу. Адрес возврата обычно запоминается в первой ячейке выполняемой подпрограммы. При этом возврат осуществляется по команде безусловного перехода с косвенной адресацией по содержимому первого слова подпрограммы.
Наиболее эффективной адресацией при обращении к подпрограммам является стековая адресация. Адрес возврата записывается в вершину стека, а после выполнения подпрограммы выталкивается из стека и размещается в счетчике команд. Часто в стек вводится содержимое не только счетчика команд, но и всех регистров МП. При использовании стека характерной особенностью выхода из подпрограммы является использование безадресной команды ВОЗВРАТ. По этой команде процессор извлекает из памяти адрес, откуда произошел вызов подпрограммы, и переходит к команде, непосредственно следующей за этим адресом. Затем программа выполняется в обычном режиме.
Применение подпрограмм позволяет придать программе свойство структурированности. Функционально законченную процедуру удобно оформлять в виде подпрограммы даже если в основной программе она используется только один раз. Например, подпрограмма вывода кода управления семисегментным индикатором, подпрограмма генерации звукового сигнала и т.д. Из подпрограмм- библиотек удобно конструировать разнообразные программы.