Адресация памяти в микропроцессорах

Автор работы: Пользователь скрыл имя, 15 Декабря 2013 в 19:49, реферат

Краткое описание

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

Прикрепленные файлы: 1 файл

Адресация данных.docx

— 83.61 Кб (Скачать документ)

Адресация памяти в микропроцессорах.

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

Способы адресации

Существуют следующие способы  адресации операндов:

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

Рис. 65. Прямая адресация  в AVR

Регистры общего назначения. Команды, оперирующие с двумя  регистрами, действуют, в основном, аналогичным образом. В этих командах регистр-приемник (destination) указывается перед регистром-источником (source), то есть является первым параметром. Таким образом, команда

add R0, R1

реально выполняется так: R0 = R0 + R1. Рассмотренные способы адресации операндов называются прямой регистровой адресацией (рис. 66). 

Рис. 66. Прямая адресация AVR к  двум РОН

Операнды могут также  входить в состав команды. В других контроллерах это называется «непосредственной  адресацией». В AVR будем называть этот способ адресации «непосредственной  прямой регистровой» (рис.67). Хорошим примером команды с такой адресацией является ORI: так как поле адреса составляет 4 бита, возможно обращаться только к 16 старшим РОН. 

Рис. 67. Непосредственная адресация AVR

Это, очевидно, окажет влияние  на то, как разместить данные в рабочих регистрах. Чтобы избежать ошибок, можно использовать в качестве рабочих 16 старших регистров общего назначения, имеющих адреса с $10 по $1F.

Последняя форма прямой адресации, применяемая для доступа ко всему  объему адресуемой памяти, использует второе слово команды для указания

16-разрядного адреса. При этом  способе адресации данные, размещенные  в любой точке адресуемой памяти, поступают в РОН или выбираются  из них. Есть две особенности,  на которые стоит обратить  внимание при такой адресации. Первая особенность - опять доступны только 16 старших РОН. Вторая особенность - команды с такой адресацией не реализуются в младших моделях AVR1200. В этих моделях для передачи данных между РОН и набором регистров ввода-вывода используются команды in и out, реализующие прямую адресацию двух регистров.

Последний способ обращения  к данным - косвенная адресация. По технической документации на микроконтроллеры AVR видно, что в ней используется пять рисунков для описания этого способа адресации, реализация которого иллюстрируется на рисунке 68. На этом рисунке показана только косвенно-регистровая адресация и не приведены ее варианты с предекрементом и постинкрементом. Основные команды косвенной адресации используют содержимое индексных регистров в качестве адреса для выборки данных. Это похоже на индексную адресацию в большинстве других микроконтроллеров. Это единственный режим, доступный в младших моделях AVR, где для обращения к РОН может использоваться только индексный регистр Z, а РОН и регистры ввода-вывода не образуют общее регистровое пространство. 

Рис. 68. Косвенная адресация  к РОН-памяти данных в AVR

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

Есть и другие варианты косвенной адресации: косвенно-регистровая  с предекрементом и косвенно-регистровая с постинкрементом. При их использовании происходит изменение содержимого индексного регистра в процессе выполнения команды - либо до обращения к памяти (предекремент), либо после (постинкремент). Значительным преимуществом этих команд является возможность организации стека, кроме того они могут служить для индексации элементов в структурах данных. Это позволяет эффективно применять AVR при разработке компиляторов для языков высокого уровня, которые используют локальные переменные.

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

Как правило, другой операнд должен присутствовать в регистре адреса или  данных.

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

Во всех способах адресации с  индексированием введено масштабирование  индекса. Оно осуществляется умножением содержимого индексного регистра Xn на масштабный множитель SCALE, имеющий значение 1, 2, 4 и 8. В зависимости от значения символа разрядности SIZE, указываемого после имени индексного регистра, используется 16 или 32 разряда его содержимого. Если после имени индексного регистра указан символ W (word, слово). то индексом служат 16 его младших разрядов, расширенные до 32-х разрядов битом знака. Если же указан символ L (long word, длинное слово), то индексом служит 32-х разрядное значение индексного регистра, используемое как число со знаком. При SCALE=1 содержимое Xn (индексного регистра) остается без изменения, а при SCALE = 2,4 или 8 сдвигается влево на 1, 2 или 3 разряда соответственно.

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

Xn.SIZE*SCALE

где Xn – индексный регистр. Им может быть An (регистр адреса) или Dn (регистр данных). SIZE – W или L, а SCALE – 1, 2, 4, 8. Например:

D5.L*1

A4.W*4

Способы адресации  в микропроцессорах корпорации Intel

Способы адресации в микропроцессорах корпорации Intel представлены в таблице D.3.I и на рисунке D.3.1.

Таблица 1.6.  
Примеры команд с 32-х битной адресацией.

Адресация

Пример.

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

mov     eax,1234567h

Регистровая

mov     eax,ecx

Прямая (абсолютная)

mov     eax,[3456789h]

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

mov     eax,[ecx]

Базовая/индексная со смещением

mov     eax,[ecx]+1200h

Базовая индексная со смещением

mov     eax,[ecx][edx]+40h

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

mov     eax,[esi*4]+40h

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

mov     eax,[edx][ecx*8]

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

mov     eax,[ebx][edi*2]+20h


Рис. D.3.1. Схема формирования 32-х разрядного линейного адреса в микропроцессорах x86.

Адресация операндов  в памяти и регистрах.

Обрабатываемые данные – операнды могут располагаться в регистрах (данных и адреса) либо в оперативной  памяти. Для выборки слова (или  длинного слова) команда задает адрес  старшего бита, который является четным (или кратным четырем).

При этом возможно два варианта:

  1. Младшие байты слова располагаются в ячейках с большими номерами: N, N+1, N+2, N+3. Такой порядок адресации байтов называется "big-endian". Он принят в микропроцессорах Motorola, Digital Equipment (COMPAQ) и IBM.
  2. Младшие биты располагаются в ячейках с меньшими номерами: N+1,N,N+4,N+3. Этот порядок называется "little-endian" и применяется компаниями Intel, AMD и Cyrix (VIA Technology).

 

 Соответствие  регистров для адресации данных и кодов операций команд.

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

Следует отметить, что в RISC-процессорах  нет возможности адресации операнда из оперативной памяти, а возможна только загрузка данных в регистр. Соответственно упрощается устройство управления, и  все команды могут иметь одинаковую длину.

Особенности "стековой адресации".

Во всех CISC-процессорах аппаратно  поддерживается стек, т.е. область оперативной  памяти, предназначенная для временного хранения любой информации. Для стека  характерны две операции: включение  в стек "вталкивание" и извлечение "выталкивание" данных из стека. Включения  и извлечение производятся с одного конца, называемого вершиной стека (Top Of Stack – TOS или Stack Top – ST), таким образом, что последнее включение в стек извлекается из него первым. Такая дисциплина называется LIFO (Last In – First Out, "последним пришел – первым ушел").

Предполагается, что область памяти для стека находится в специальном  сегменте стека. В микропроцессорах Intel его адрес находится в паре SS:SP и SS:ESP, причем регистр SS содержит базу регистра, а вершина стека адресуется смещением в SP или ESP. Алгоритм работы со стеком в микропроцессоре i80386 и старше в P-режиме следующий:

  1. Начало алгоритма вставки в стек.
  2. Проверяется значение в ESP.
  3. Если оно меньше четырех, то генерируется особый случай нарушения стека.
  4. Происходит декремент ESP на четыре и операнд сохраняется по адресу SS:[ESP].
  5. Конец алгоритма вставки в стек.
  6. Начало алгоритма извлечения из стека.
  7. Проверяется значение в ESP.
  8. Если адрес SS:[ESP] находится вне пределах сегмента стека (адрес слишком большой и не помещается в стек), формируется особый случай нарушения стека.
  9. Если же обращение разрешенное, то считываются данные по адресу SS:[ESP] и осуществляется инкремент ESP на четыре.
  10. Конец алгоритма извлечения из памяти.

В стек можно включить содержимое регистра, ячейки памяти или константу (процессор i8086/88 включать в стек константы  не может). Извлечь данные из стека  можно в регистр или ячейку памяти.

Как видно из предложенного алгоритма, сегмент стека заполняется не "с ног до головы" (т.е. от меньших  адресов к большему), а наоборот, от больших адресов к меньшим. Это свойство сегмента специально указывается особым флажком в дескрипторе сегмента.

Сказанное относится к реализации стека в микропроцессорах корпорации Intel. В микропроцессорах Motorola вершина стека автоматически привязана к регистру A7 (и его копии A7' в режиме супервизора). Далее распределением базового адреса сегмента стека и управление его работой перекладывается на плечи операционной системы (т.е. на системного программиста). Отметим, что загрузка стека для программы супервизора осуществляется только при первоначальной загрузки процессора и программно недоступна, а загрузка стека программы пользователя является привилегированной командой и выполняется только в режиме супервизора. Об этом надо помнить, манипулируя со стеком на этой платформе. 


Информация о работе Адресация памяти в микропроцессорах