Автор работы: Пользователь скрыл имя, 15 Декабря 2013 в 19:49, реферат
Для осуществления операций с данными в АЛУ необходимо загрузить их в микропроцессор из оперативной памяти. Но для того, чтобы выбрать данные (или, по другому, операнды) из памяти, необходимо обратиться к ним по определенному адресу. Способы задания этого адреса называется адресацией памяти в микропроцессоре.
Адресация памяти в микропроцессорах.
Для осуществления операций с данными в АЛУ необходимо загрузить их в микропроцессор из оперативной памяти. Но для того, чтобы выбрать данные (или, по другому, операнды) из памяти, необходимо обратиться к ним по определенному адресу. Способы задания этого адреса называется адресацией памяти в микропроцессоре.
Существуют следующие способы адресации операндов:
Основным способом доступа к данным является прямое обращение к регистрам общего назначения. Обычно в формате команды отводятся пять бит, которые позволяют адресоваться к любому регистру. Прямое обращение к одному из РОН показано на рисунке 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-разрядного адреса. При этом
способе адресации данные, размещенные
в любой точке адресуемой
Последний способ обращения к данным - косвенная адресация. По технической документации на микроконтроллеры AVR видно, что в ней используется пять рисунков для описания этого способа адресации, реализация которого иллюстрируется на рисунке 68. На этом рисунке показана только косвенно-регистровая адресация и не приведены ее варианты с предекрементом и постинкрементом. Основные команды косвенной адресации используют содержимое индексных регистров в качестве адреса для выборки данных. Это похоже на индексную адресацию в большинстве других микроконтроллеров. Это единственный режим, доступный в младших моделях AVR, где для обращения к РОН может использоваться только индексный регистр Z, а РОН и регистры ввода-вывода не образуют общее регистровое пространство.
Рис. 68. Косвенная адресация к РОН-памяти данных в AVR
При обычной косвенно-регистровой
адресации содержимое индексного регистра
не изменяется при выполнении операции.
Для получения эффективного адреса
можно использовать положительное смещение,
прибавляемое к содержимому индексного
регистра. Такой способ адресации называется косвенно-
Есть и другие варианты косвенной адресации: косвенно-регистровая с предекрементом и косвенно-регистровая с постинкрементом. При их использовании происходит изменение содержимого индексного регистра в процессе выполнения команды - либо до обращения к памяти (предекремент), либо после (постинкремент). Значительным преимуществом этих команд является возможность организации стека, кроме того они могут служить для индексации элементов в структурах данных. Это позволяет эффективно применять AVR при разработке компиляторов для языков высокого уровня, которые используют локальные переменные.
В технической документации для микроконтроллеров AVR показано, каким образом можно обеспечить обращение к данным, размещенным в памяти программ, и как изменяется содержимое программного счетчика.
Как правило, другой операнд должен присутствовать в регистре адреса или данных.
Смещение может быть положительным и отрицательным. В качестве индексного регистра при индексации с индексированием может служить любой из регистров данных или адреса. Текущее содержимого программного счетчика, используемое для выделения относительного адреса, равно адресу первого слова выполняемой команды, умноженного на 2 (на 4).
Во всех способах адресации с
индексированием введено
При программировании на языке ассемблера значение индекса задается следующим обозначением:
Xn.SIZE*SCALE
где Xn – индексный регистр. Им может быть An (регистр адреса) или Dn (регистр данных). SIZE – W или L, а SCALE – 1, 2, 4, 8. Например:
D5.L*1
A4.W*4
Способы адресации в микропроцессорах корпорации Intel представлены в таблице D.3.I и на рисунке D.3.1.
Таблица 1.6. | |
Адресация |
Пример. |
Непосредственная |
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.
Обрабатываемые данные – операнды
могут располагаться в
При этом возможно два варианта:
Соответствие регистров для адресации данных и кодов операций команд.
Как можно заметить, в сложной адресации (типа косвенно-индексной со смещением и масштабированием) не могут участвовать произвольные регистры. Соответствие между командами и кодом, выполняемый процессором, происходит с помощью кода операции в команде. В коде операции указывается, с какими регистрами работает процессор, и как и с помощью каких других регистров осуществляется адресация операндов. Подробнее об этом смотри руководство по конкретному процессору.
Следует отметить, что в RISC-процессорах
нет возможности адресации
Во всех CISC-процессорах аппаратно поддерживается стек, т.е. область оперативной памяти, предназначенная для временного хранения любой информации. Для стека характерны две операции: включение в стек "вталкивание" и извлечение "выталкивание" данных из стека. Включения и извлечение производятся с одного конца, называемого вершиной стека (Top Of Stack – TOS или Stack Top – ST), таким образом, что последнее включение в стек извлекается из него первым. Такая дисциплина называется LIFO (Last In – First Out, "последним пришел – первым ушел").
Предполагается, что область памяти
для стека находится в
В стек можно включить содержимое регистра, ячейки памяти или константу (процессор i8086/88 включать в стек константы не может). Извлечь данные из стека можно в регистр или ячейку памяти.
Как видно из предложенного алгоритма, сегмент стека заполняется не "с ног до головы" (т.е. от меньших адресов к большему), а наоборот, от больших адресов к меньшим. Это свойство сегмента специально указывается особым флажком в дескрипторе сегмента.
Сказанное относится к реализации стека в микропроцессорах корпорации Intel. В микропроцессорах Motorola вершина стека автоматически привязана к регистру A7 (и его копии A7' в режиме супервизора). Далее распределением базового адреса сегмента стека и управление его работой перекладывается на плечи операционной системы (т.е. на системного программиста). Отметим, что загрузка стека для программы супервизора осуществляется только при первоначальной загрузки процессора и программно недоступна, а загрузка стека программы пользователя является привилегированной командой и выполняется только в режиме супервизора. Об этом надо помнить, манипулируя со стеком на этой платформе.