Способы адресации микропроцессора это
Система адресации (Лекция)
1. Режимы адресации
2. Способы адресации
3. Режимы адресации операндов
4. Возможности микропроцессоров по адресации
1. Режимы адресации
Для взаимодействия с различными модулями в ЭВМ должны быть средства идентификации ячеек внешней памяти, ячеек внутренней памяти, регистров МП и регистров устройств ввода/вывода. Поэтому каждой из запоминающих ячеек присваивается адрес, т.е. однозначная комбинация бит. Количество бит определяет число идентифицируемых ячеек. Обычно ЭВМ имеет различные адресные пространства памяти и регистров МП, а иногда — отдельные адресные пространства регистров устройств ввода/вывода и внутренней памяти. Кроме того, память хранит как данные, так и команды. Поэтому для ЭВМ разработано множество способов обращения к памяти, называемых режимами адресации.
Режим адресации памяти — это процедура или схема преобразования адресной информации об операнде в его исполнительный адрес.
2. Способы адресации
Все способы адресации памяти можно разделить на:
1) прямой, когда исполнительный адрес берется непосредственно из команды или вычисляется с использованием значения, указанного в команде, и содержимого какого-либо регистра (прямая адресация, регистровая, базовая, индексная и т.д.);
2) косвенный, который предполагает, что в команде содержится значение косвенного адреса, т.е. адреса ячейки памяти, в которой находится окончательный исполнительный адрес (косвенная адресация).
В каждой микроЭВМ реализованы только некоторые режимы адресации, использование которых, как правило, определяется архитектурой МП .
Инструкция микропроцессора может содержать следующие поля:
Префикс — необязательная часть инструкции, позволяет изменить некоторые особенности ее выполнения. В команде может быть использовано сразу несколько префиксов разного типа. Типы префиксов:
1) командные префиксы (префиксы повторения)
2) префикс блокировки шины LOCK;
3) префиксы размера (см. далее);
4) префиксы замены сегмента.
Байт «Mod R/M» определяет режим адресации, а также иногда дополнительный код операции. Необходимость байта «Mod R/M» зависит от типа инструкции.
Байт SIB (Scale-Index-Base) определяет способ адресации при обращении к памяти в 32-битном режиме. Необходимость байта SIB зависит от режима адресации, задаваемого полем «Mod R/M».
Кроме того, инструкция может содержать непосредственный операнд и/или смещение операнда в сегменте данных.
На размер инструкции накладывается ограничение в 15 байт. Инструкция большего размера может получиться при некорректном использовании большого количества префиксов.
3. Режимы адресации операндов
Если инструкция микропроцессора требует операнды, то они могут задаваться следующими способами:
1) непосредственно в коде инструкции (только операнд-источник);
2) в одном из регистров;
3) через порт ввода-вывода;
Для совместимости с 16-битными процессорами архитектура IA-32 использует одинаковые коды для инструкций, оперирующих как с 16-битными, так и 32-битными операндами. Новая архитектура предусматривает также новые возможности при указании адреса для операнда в памяти. Как процессор будет считать операнд или его адрес, зависит от эффективного размера операнда и эффективного размера адреса для данной команды. Эти значения определяются на основе режима работы, бита D дескриптора используемого сегмента и наличия в инструкции определенных префиксов.
Непосредственный режим адресации подразумевает включение операнда-источника в код инструкции. Операнд может быть 8-битным или 16-битным, если значение эффективного размера операнда — 16. Операнд может быть 8-битным или 32-битным, если значение эффективного размера операнда — 32. Обычно непосредственные операнды используются в арифметических инструкциях.
Регистровый режим адресации определят операнд-источник или операнд-приемник в одном из следующих регистров:
1) регистры общего назначения (EAX/AX, EBX/BX, ECX/CX, EDX/DX, ESI/SI, ESP/SP, EBP/BP — 16-битный регистр, если эффективный размер операнда — 16, или 32-битный регистр в противном случае) или их младшие байты (AH, AL, BH, BL, CH, CL, DH, DL);
2) сегментные регистры (CS, DS, SS, ES, FS, GS);
3) регистр флагов (EFLAGS для 32-битных операндов или FLAGS для 16-битных);
4) управляющие регистры (CR0/MSW, CR2, CR3, CR4) и регистры системных таблиц (GDTR, LDTR, IDTR, TR);
5) регистры отладки (DR0-DR7);
6) машинно-зависимые регистры (MSRs);
7) регистры сопроцессора, MMX и XMM.
В некоторых случаях (например, в инструкциях DIV и MUL) могут использоваться пары 32-битных (или 16-битных) регистров (например, EDX:EAX), образуя 64-битный (32-битный) операнд.
Адресация через порт ввода-вывода подразумевает получение операнда или сохранение операнда через пространство портов ввода-вывода. Адрес порта ввода-вывода либо непосредственно включается в код инструкции, либо берется из регистра DX.
Очень распространенный способ адресации операнда — адресация через память . Таким образом может быть указан операнд-источник или операнд-приемник. Следует отметить, что процессор не позволяет одновременно задавать оба операнда через память (за исключением некоторых цепочечных команд).
Для получения операнда из памяти процессору необходимо знать селектор сегмента и смещение в сегменте. В некоторых командах селектор может быть указан непосредственно в коде инструкции. В других случаях процессор может явно или неявно использовать значение одного из сегментных регистров. Под неявным использованием сегментных регистров подразумевается то, что в зависимости от предназначения операнда процессор использует определенный сегментный регистр для обращения к памяти: CS — для выборки инструкций; SS — для работы со стеком или обращения к памяти через регистры ESP или EBP; ES — для получения адреса операнда-приемника в цепочечных командах; DS — при всех остальных обращениях к памяти. Явное использование сегментных регистров возможно, если в код инструкции включается префикс смены сегмента. Указание префикса смены сегмента допустимо не для всех команд: нельзя менять сегмент для команд работы со стеком (всегда используется SS), для цепочечных команд можно менять сегмент только операнда-источника (операнд-приемник всегда адресуется через ES).
4. Возможности микропроцессоров по адресации
Одной из важнейших архитектурных характеристик МП является перечень возможных способов обращения к памяти или видов адресации. Возможности МП по адресации существенны с двух точек зрения.
Во-первых, большой объем памяти требует большой длины адреса, так как n-разрядный адрес позволяет обращаться к памяти емкостью 2n слов. Типовые 8-разрядные слова МП дают возможность непосредственно обращаться только к 256 ячейкам памяти, что явно недостаточно. Если учесть, что обращение к памяти является наиболее часто встречающейся операцией, то очевидно, что эффективность использования МП во многом определяется способами адресации к памяти большого объема при малой разрядности МП.
Во-вторых, для удобства программирования желательно иметь простую систему формирования адресов данных при работе с массивами, таблицами и указателями. Рассмотрим способы решения этих проблем.
Если адресное поле в команде является ограниченным и недостаточным для непосредственного обращения к любой ячейке памяти, то память в таких случаях разбивают на страницы, где страницей считается 2n ячеек памяти.
Для согласования адресного поля команды малой разрядности с памятью большого объема (для решения “страничной” проблемы) в МП применяются различные виды адресации:
Прямая адресация к текущей странице. При такой адресации программный счетчик разбивается на два поля; старшие разряды указывают номер страницы, а младшие — адрес ячейки на странице. В адресном поле команды размещается адрес ячейки на странице, а адрес страницы должен быть установлен каким-то другим способом, например с помощью специальной команды.
Прямая адресация с использованием страничного регистра. В МП должен быть предусмотрен программно доступный страничный регистр, загружаемый специальной командой. Этот регистр добавляет к адресному полю команды несколько разрядов, необходимых для адресации ко всей памяти.
Прямая адресация с использованием двойных слов. Для увеличения длины адресного поля команды под адрес отводится дополнительное слово (а если нужно, то и два).
Адресация относительно программного счетчика. Адресное поле команды рассматривается как целое со знаком, которое складывается с содержимым программного счетчика для формирования исполнительного адреса. Такой способ относительной адресации создает плавающую страницу и упрощает перемещение программ в памяти.
Адресация относительно индексного регистра. Исполнительный адрес образуется суммированием содержимого индексного регистра и адресного поля команды, рассматриваемого как целое со знаком. Индексный регистр загружается специальными командами.
Косвенная адресация. При косвенной адресации в адресном поле команды указывается адрес на текущей странице, по которому хранится исполнительный адрес. В поле команды при этом требуется дополнительный разряд — признак косвенной адресации. Исполнительный адрес может храниться не в ячейке памяти, а в регистре общего назначения. В этом случае косвенная адресация называется регистровой.
Источник
Виды адресации микропроцессора
Одной из важнейших архитектурных характеристик МП является перечень возможных способов обращения к памяти или видов адресации. Возможности МП по адресации существенны с двух точек зрения.
Во-первых, большой объем памяти требует большой длины адреса, так как n-разрядный адрес позволяет обращаться к памяти емкостью 2n слов. Типовые 8-разрядные слова МП дают возможность непосредственно обращаться только к 256 ячейкам памяти, что явно недостаточно. Если учесть, что обращение к памяти является наиболее часто встречающейся операцией, то очевидно, что эффективность использования МП во многом определяется способами адресации к памяти большого объема при малой разрядности МП.
Во-вторых, для удобства программирования желательно иметь простую систему формирования адресов данных при работе с массивами, таблицами и указателями. Рассмотрим способы решения этих проблем.
Если адресное поле в команде является ограниченным и недостаточным для непосредственного обращения к любой ячейке памяти, то память в таких случаях разбивают на страницы, где страницей считается 2n ячеек памяти.
Для согласования адресного поля команды малой разрядности с памятью большого объема (для решения “страничной” проблемы) в МП применяются различные виды адресации:
Прямая адресация к текущей странице . При такой адресации программный счетчик разбивается на два поля; старшие разряды указывают номер страницы, а младшие — адрес ячейки на странице. В адресном поле команды размещается адрес ячейки на странице, а адрес страницы должен быть установлен каким-то другим способом, например с помощью специальной команды.
Прямая адресация с использованием страничного регистра. В МП должен быть предусмотрен программно доступный страничный регистр, загружаемый специальной командой. Этот регистр добавляет к адресному полю команды несколько разрядов, необходимых для адресации ко всей памяти.
Прямая адресация с использованием двойных слов. Для увеличения длины адресного поля команды под адрес отводится дополнительное слово (а если нужно, то и два).
Адресация относительно программного счетчика. Адресное поле команды рассматривается как целое со знаком, которое складывается с содержимым программного счетчика для формирования исполнительного адреса. Такой способ относительной адресации создает плавающую страницу и упрощает перемещение программ в памяти.
Адресация относительно индексного регистра. Исполнительный адрес образуется суммированием содержимого индексного регистра и адресного поля команды, рассматриваемого как целое со знаком. Индексный регистр загружается специальными командами.
Косвенная адресация . При косвенной адресации в адресном поле команды указывается адрес на текущей странице, по которому хранится исполнительный адрес. В поле команды при этом требуется дополнительный разряд — признак косвенной адресации. Исполнительный адрес может храниться не в ячейке памяти, а в регистре общего назначения. В этом случае косвенная адресация называется регистровой.
Источник
Способы адресации
Система адресации обеспечивает в МП устройствах доступ к операндам, хранящимся в устройствах памяти, внутренних программно- доступных регистрах и внешних устройствах через порты ввода/вывода. Длина формата команды (общее количество бит в коде команды) определяет скорость выполнения команды и зависит от способа адресации операндов. Способы адресации играют большую роль в организации управления ходом выполнения программы, во многом определяют скорость обработки информации. Существуют следующие основные способы адресации:
Прямая адресация – исполнительный адрес размещается в адресном поле команды. В этом способе непосредственно используется счетчик команд и аккумулятор МП. При прямой адресации содержимое счетчика команд передается на ША и из адресуемой ячейки выбирается очередная команда, поступающая в устройство управления МП. С помощью прямой адресации в АЛУ может вызываться и операнд. Для этого на ША передается адрес ячейки памяти, содержащийся в команде. При необходимости изменения последовательного порядка выполнения программы адресуется ячейка памяти, содержащая адрес условного или безусловного перехода. Команда, содержащая прямой адрес, занимает 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, а сам «регистр М» физически находится вне процессора).
Преимущество косвенной адресации в том, что косвенный адрес операнда содержит больше битов, чем число битов в адресном поле команды, т.е. доступен больший объем адресного пространства памяти. Недостатком является увеличение времени для извлечения операнда по сравнению со способом прямой адресации.
Относительная индексная адресация (автоинкрементная и автодекрементная) – базовый исполнительный адрес вычисляется так же, как и при регистровой косвенной адресации, а следующие исполнительные адреса получаются увеличением или уменьшением текущего адреса операнда на определенную величину после каждой обработки адреса. Обычно такая адресация используется при обработке массивов данных. В этом случае список данных представляется как совокупность индексных операндов. Операнды с индексами помещаются в соседних ячейках памяти. Для организации доступа к этим ячейкам памяти используются индексные регистры аналогичные в данном случае счетчику команд. Для двумерного массива истинный адрес
ИА = [базовый адрес] + (содержимое индексных регистров)
Для перебора операндов с индексами осуществляется автоиндексация, т.е. добавление к содержимому регистров плюс или минус единицы. Разновидностью автоиндексации является стековая адресация. В этом случае автоиндексный регистр является указателем стека, а область памяти им адресуемая, – стеком. Принцип стековой адресации заключается в следующем: после каждой засылки в стек, содержимое указателя стека увеличивается, а после каждого изъятия из стека — уменьшается на единицу.
Относительная адресация– исполнительный адрес получается сложением адресного поля команды с содержимым базового регистра процессора. Это сложение производится в специальном сумматоре. Относительная адресация применяется в командах перехода.
Страничная адресация– память делится на ряд страниц одинаковой длины. Адресация страниц осуществляется по содержимому программного счетчика или регистра страниц. Адресация памяти внутри страниц производится адресом, который содержится в команде.
Обращение к подпрограммам.Ряд процедурв ЭВМ часто используется различными программами или одной и той же программой многократно. Такие процедуры могут быть стандартизированы и оформлены в виде подпрограмм.
В этом случае вся программа может быть представлена в виде объединения основной программы и подпрограмм. Обращение к подпрограмме происходит из основной программы.
Перед обращением к подпрограмме необходимо запомнить адрес возврата в основную программу. Адрес возврата обычно запоминается в первой ячейке выполняемой подпрограммы. При этом возврат осуществляется по команде безусловного перехода с косвенной адресацией по содержимому первого слова подпрограммы.
Наиболее эффективной адресацией при обращении к подпрограммам является стековая адресация. Адрес возврата записывается в вершину стека, а после выполнения подпрограммы выталкивается из стека и размещается в счетчике команд. Часто в стек вводится содержимое не только счетчика команд, но и всех регистров МП. При использовании стека характерной особенностью выхода из подпрограммы является использование безадресной команды ВОЗВРАТ. По этой команде процессор извлекает из памяти адрес, откуда произошел вызов подпрограммы, и переходит к команде, непосредственно следующей за этим адресом. Затем программа выполняется в обычном режиме.
Применение подпрограмм позволяет придать программе свойство структурированности. Функционально законченную процедуру удобно оформлять в виде подпрограммы даже если в основной программе она используется только один раз. Например, подпрограмма вывода кода управления семисегментным индикатором, подпрограмма генерации звукового сигнала и т.д. Из подпрограмм- библиотек удобно конструировать разнообразные программы.
Источник