- •Глава 21. Особенности архитектур arMv7a, arMv8, arMv7m
- •21.1. Версии архитектуры процессоров arm
- •21.2. Архитектура arMv7a
- •Условное восполнение
- •21.3. Рабочие состояния процессора
- •21.4. Типы данных
- •21.5. Организация памяти
- •21.6. Режимы работы
- •21.7. Регистры
- •21.7. Исключительные ситуации
- •21.8. Особенности архитектуры arMv8
- •21.9. Особенности архитектуры CortexM
- •Регистры
- •Организация памяти
- •21.10. Контрольные вопросы
21.3. Рабочие состояния процессора
Поддерживаются следующие рабочие состояния:
ARM - в данном состоянии выполняются 32-разрядные команды архитектуры ARM;
Thumb - в данном состоянии выполняются 16-разрядные команды Thumb.
Переход между состояниями ARM и Thumb не оказывает влияния на режим процессора или содержимое регистров.
Обработка всех исключительных ситуаций выполняется в состоянии ARM. Если исключительная ситуация возникает в состоянии Thumb, то процессор возвращается в состояние ARM. При возврате из обработчика исключительной ситуации осуществляется автоматический переход в состояние Thumb. Обработчик исключительных ситуаций может изменить состояние на Thumb, но он также должен вернуться к состоянию ARM для корректного завершения обработки исключительной ситуации.
21.4. Типы данных
Поддерживаются следующие типы данных:
32-разрядные слова;
16-разрядные полуслова;
байты.
В памяти данные должны быть выровнены следующим образом:
слова - в пределах 4 байт;
полуслова - в пределах 2 байт.
Запись полуслов в память производится без повреждения смежных байт в слове.
21.5. Организация памяти
Предусматривается «плоская» (flat) модель оперативной памяти как линейной совокупности байт, с номерами от 0 до N-1. Данные, состоящие из M байтов, записываются подряд в М ячеек. Начальный адрес таких данных должен быть кратным 2i , где i=: 1 – для полуслов; 2 – для слов; 4 – для двойных слов. Например:
байты 0..3 представляют первое записанное 32-разрядное слово;
байты 4...7 представляют второе записанное 32-разрядное слово.
Поддерживаются оба порядка следования байт многобайтных слов в оперативной памяти:
прямой порядок байт (Little-endian), когда сначала следует младший, а затем старший байты;
обратный порядок байт (Big-Endian), когда сначала следует старший, а затем младший байты.
По умолчанию используется прямой порядок байт (Little-endian).
21.6. Режимы работы
Поддерживаются семь режимов работы:
Режим пользователя - обычное состояние процессора при выполнении программы, также используется для выполнения большинства прикладных программ.
Режим быстрого прерывания (FIQ), используется для передачи данных или обработки их каналом.
Режим прерывания (IRQ) используется для обработки прерываний общего назначения.
Супервизорный режим - защищенный режим для операционной системы.
Аварийный режим - вводится после аварийной выборки данных или команды.
Системный режим - привилегированный режим пользователя для операционной системы.
Неопределенный режим - когда выполняется неопределенная команда.
Все режимы, кроме режима пользователя, являются привилегированными режимами. Привилегированные режимы используются для обслуживания прерываний и исключительных ситуаций, а также для доступа к защищенным ресурсам.
Каждый регистр имеет идентификатор режима.
21.7. Регистры
Набор регистров в состоянии ARM
В состоянии ARM доступны 16 регистров общего назначения, один или два регистра состояния.
В набор регистров в состоянии ARM входят:
16 32-разрядных регистров общего назначения с номерами R0...R15;
регистр состояния CPSR, который содержит флаги условий и разряды текущего режима.
Регистры R0...R13 являются регистрами общего назначения и могут использоваться как для хранения данных, так и для хранения адресов оперативной памяти. Регистры R13, R14 и R15 выполняют специальные функции.
Для уменьшения времени перехода в привилегированные режимы часть регистров общего назначения и регистр состояния дублируются (используются альтернативные регистры).
Общее число:
32-разрядных регистров общего назначения – 31;
регистров состояния - 6,
Регистр связи
Регистр 14 используется как регистр связи (LR) подпрограммы. Он принимает копию содержимого регистра R15 при выполнении команды «Переход по ссылке» (BL).
Во всех остальных случаях регистр R14 может использоваться как регистр общего назначения.
Соответствующие альтернативные регистры R14_svc, R14_irq, R14_fiq, R14_abt и R14_und аналогичным образом используются для запоминания значений регистра возврата R15 при возникновении прерываний и исключительных ситуаций или при выполнении команды BL внутри процедур обработки прерываний или исключительных ситуаций.
Счетчик программы (регистр номера команды)
Регистр 15 используется как регистр номера команды (PC).
В состоянии ARM разряды [1:0] регистра R15 имеют неопределенное значение и должны игнорироваться. Разряды [31:2] содержат значение регистра номера команды.
В состоянии Thumb разряд [0] имеет неопределенное значение и должен игнорироваться.
Указатель стека
Регистр R13 используется в качестве указателя стека (SP).
Регистр состояния программы (SPSR)
Регистр доступен только в привилегированных режимах. Он содержит флаги кодов условия и разряды режима, являющиеся результатом исключительной ситуации, которая вызвала вхождение в текущий режим.
Банки регистров (альтернативные регистры) - физические регистры в ядре, которые доступны в зависимости от текущего рабочего режима процессора. Содержимое альтернативного регистра запоминается при изменениях рабочих режимов.
В режиме FIQ имеется семь альтернативных регистров с номерами R8_fiq - R14_fiq.
В состоянии ARM несколько обработчиков быстрых прерываний (FIQ) не должны выполнять запись в какой-либо регистр.
В режимах пользователя, IRQ, супервизорном, аварийном и неопределенном имеется два альтернативных регистра с номерами R13 и R14, позволяя хранить собственное значение SP и LR в каждом режиме.
В системном режиме используются те же регистры, что и в режиме пользователя.
Набор регистров в состоянии Thumb
Набор регистров в состоянии Thumb является поднабором по отношению к набору регистров в состоянии ARM. Программист имеет доступ к следующим регистрам:
8 регистрам общего назначения R0-R7;
регистру номера команды (PC);
указателю стека SP;
регистру связи LR;
регистру текущего состояния программы CPSR.
В каждом привилегированном режиме имеются альтернативные регистры SP, LR и SPSR. Данный набор регистров показан на рисунке 21.4.
Регистры общего назначения и счетчик программы в состоянии Thumb
Системный режим и режим пользователя |
Режим быстрого прерывания |
Супервизор-ный режим |
Аварийный режим |
Режим прерывания |
Неопреде-ленный режим |
R0 |
R0 |
R0 |
R0 |
R0 |
R0 |
R1 |
R1 |
R1 |
R1 |
R1 |
R1 |
R2 |
R2 |
R2 |
R2 |
R2 |
R2 |
R3 |
R3 |
R3 |
R3 |
R3 |
R3 |
R4 |
R4 |
R4 |
R4 |
R4 |
R4 |
R5 |
R5 |
R5 |
R5 |
R5 |
R5 |
R6 |
R6 |
R6 |
R6 |
R6 |
R6 |
R7 |
R7 |
R7 |
R7 |
R7 |
R7 |
SP |
*SP_fiq |
*SP_svc |
*SP_abt |
*SP_irq |
*SP_und |
LR |
*LR_fiq |
*LR_svc |
*LR_abt |
*LR_irq |
*LR_und |
PC |
PC |
PC |
PC |
PC |
PC |
Регистры состояния (статуса) программы в состоянии Thumb
CPSR |
CPSR |
CPSR |
CPSR |
CPSR |
CPSR |
|
*SPSR_fiq |
*SPSR_svc |
*SPSR_abt |
*SPSR_irq |
*SPSR_und |
* - альтернативный регистр
Рисунок 21.4. Организация регистров в состоянии Thumb
Соотношение между регистрами в состояниях ARM и Thumb
Регистры в состоянии Thumb связаны с регистрами в состоянии ARM следующим образом:
регистры R0-R7 в состоянии Thumb и регистры R0-R7 в состоянии ARM идентичны;
регистры CPSR и SPSR в состоянии Thumb и регистры CPSR и SPSR в состоянии ARM идентичны;
указатель стека SP в режиме Thumb совпадает с регистром R13 в состоянии ARM;
регистр связи LR в режиме Thumb совпадает с регистром R14 в состоянии ARM;
регистр PC в режиме Thumb совпадает с регистром R15 в состоянии ARM.
Данные соотношения показаны на рисунке 21.5.
Рисунок
21.5. Соотношение между регистрами в
состояниях Thumb и ARM
Регистры R0-R7 называются младшими регистрами, а регистры R8-R15 - старшими регистрами.
Доступ к старшим регистрам в состоянии Thumb
В состоянии Thumb старшие регистры R8-R15 не являются частью стандартного набора регистров. Программисту на языке Ассемблер ограничивается доступ к ним, но их можно использовать для кратковременного хранения.
Можно использовать специальные команды для передачи значений из младших регистров R0-R7 в старшие и, наоборот, из старших регистров в младшие. Команда CMP позволяет сравнивать значения старших регистров со значениями младших регистров, а команда ADD позволяет сложить значения старших регистров со значениями младших регистров.
Регистры состояния (статуса) программы
Имеются регистр CPSR и пять регистров SPSR, для использования в обработчиках исключительных ситуаций.
Регистры состояния (статуса) программы:
хранят информацию о большинстве недавно выполненных операциях АЛУ;
управляют включением и отключением прерываний;
устанавливают режим работы процессора.
