5. Регистры
Процессор ARM7TDMI содержит всего 37 регистров:
- 31 32-разрядных регистра общего назначения
- 6 регистров статуса.
Не все регистры доступны в одно и тоже время. Доступность регистров для программиста зависит от состояния процессора и рабочего режима.
5.1 Набор регистров в состоянии ARM
В состоянии ARM доступны 16 регистров общего назначения, один или два регистра статуса. В привилегированных режимах становятся доступными специфические банки регистров. На рисунке 2.3 демонстрируется, какие регистры доступны в каждом режиме.
В набор регистров в состоянии ARM входят 16 регистров r0...r15. Еще один регистр, CPSR, содержит флаги условия кода и биты текущего режима. Регистры r0...r13 являются регистрами общего назначения и могут использоваться как для хранения данных, так и для хранения адреса. Регистры r14 и r15 выполняют следующие специальные функции:
Регистр связи
Регистр 14 используется как регистр связи (LR) подпрограммы.
Регистр r14 принимает копию регистра r15 при выполнении инструкции переход по ссылке (BL).
Во всех остальных случаях регистр r14 может использоваться как регистр общего назначения. Соответствующие банкированные регистры r14_svc, r14_irq, r14_fiq, r14_abt и r14_und аналогичным образом используются для запоминания значений возврата r15 при возникновении прерываний и исключительных ситуаций или при выполнении инструкции BL внутри процедур обработки прерываний или исключительных ситуаций.
Счетчик программы
Регистр 15 хранит значение PC.
В состоянии ARM биты [1:0] регистра r15 имеют неопределенное значение и должны игнорироваться. Биты [31:2] содержат значение PC.
В состоянии Thumb бит [0] имеет неопределенное значение и должен игнорироваться. Биты [31:1] содержат значение PC.
Регистр r13 iиспользуется в качестве указателя стека (SP).
В привилегированных режимах доступен еще один регистр - регистр хранения статуса программы (SPSR). Он содержит флаги кода условия и биты режима, являющиеся результатом исключительной ситуации, которое вызвало вхождение в текущий режим.
Банки регистров - дискретные физические регистры в ядре, которые находятся в позициях доступных регистров в зависимости от текущего рабочего режима процессора. Содержимое банкированного регистра запоминается при изменениях рабочих режимов.
В режиме FIQ имеется семь банкированных регистров в позициях r8-r14 (r8_fiq-r14_fiq).
В состоянии ARM несколько обработчиков быстрых прерываний (FIQ) не должны выполнять запись в какой-либо регистр.
В режимах пользователя, IRQ, супервизорном, аварийном и неопределенном имеется два банкированных регистра в позиции r13 и r14, позволяя хранить собственное значение SP и LR в каждом режиме.
В системном режиме используются те же регистры, что и в режиме пользователя.
На рисунке 2.3 представлены регистры для состояния ARM.
Рисунок 2.3. Организация регистров в состоянии ARM
5.2 Набор регистров в состоянии Thumb
Набор регистров в состоянии Thumb является поднабором по отношению к набору регистров в состоянии ARM. Программист имеет доступ к:
- 8 регистрам общего назначения r0-r7
- Счетчику программ PC
- Указателю стека SP
- Регистру связи LR
- Регистру текущего состояния программы CPSR.
В каждом привилегированном режиме имеются банкированные регистры SP, LR и SPSR. Данный набор регистров показан на рисунке 2.4.
Рисунок 2.4. Организация регистров в состоянии Thumb
5.3 Соотношение между регистрами в состояниях 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 совпадает с положением счетчика программы PC в состоянии ARM (r15).
Данные соотношения показаны на рисунке 2.5.
Рисунок 2.5. Расположение регистров в состояниях Thumb и ARM
Прим.: Регистры r0-r7 называются младшими регистрами, а регистры r8-r15 - старшими регистрами.
5.4 Доступ к старшим регистрам в состоянии Thumb
В состоянии Thumb старшие регистры r8-r15 не являются частью стандартного набора регистров. Программисту на языке Ассемблер ограничивается доступ к ним, но их можно использовать для кратковременного хранения.
Можно использовать специальные варианты инструкции MOV для передачи значений из младших регистров r0-r7 в старшие и, наоборот, из старших регистров в младшие. Инструкция CMP позволяет сравнивать значения старших регистров со значениями младших регистров, а инструкция ADD позволяет сложить значения старших регистров со значениями младших регистров. Более подробная информация приведена в "ARM Architecture Reference Manual".
|