|
Суффикс |
Установка |
Примечание |
|
_с |
Битовая маска битов управления |
SPSR[7:0] или CPSR[7:0] |
|
_f |
Битовая маска битов флагов |
SPSR[31:24] или CPSR[31:24] |
|
_s |
Битовая маска битов состояния |
SPSR[23:16] или CPSR[23:16] |
|
_х |
Битовая маска дополнительных битов |
SPSR[15:8] или CPSR[15:8] |
1.4.3. Регистровые модели процессора в состоянии THUMB
Как было сказано выше, переход процессора из состояния ARM в состояние THUMB и обратно производится с помощью команды ВХ. Состояние THUMB отличается от состояния ARM длиной команд: в состоянии THUMB
команды не 32-, а 16-битные. При выполнении программы, встроенный декодер преобразует команды, записанные в системе THUMB, в команды ARM. Вследствие компактности используемых форматов, система команд THUMB имеет ряд особенностей и ограничений по сравнению с системой ARM. Набор регистров в состоянии THUMB сокращен по сравнению с набором регистров, доступных в состоянии ARM. Все возможные регистровые модели для состояния THUMB приведены в Табл. 1.16.
Таблица 1.16. Регистровые модели процессорного ядра ARM7TDMI-S в различных режимах состояния THUMB
|
User, System |
FIQ |
Supervisor |
Abort |
IRQ |
Undefined |
|
RO (al) |
RO |
RO |
RO |
RO |
RO |
|
Rl (a2) |
Rl |
Rl |
Rl |
Rl |
Rl |
|
R2(a3) |
R2 |
R2 |
R2 |
R2 |
R2 |
|
R3 (a4) |
R3 |
R3 |
R3 |
R3 |
R3 |
|
R4 (vl) |
R4 |
R4 |
R4 |
R4 |
R4 |
|
R5(v2) |
R5 |
R5 |
R5 |
R5 |
R5 |
|
R6 (v3) |
R6 |
R6 |
R6 |
R6 |
R6 |
|
R7 (v4) |
R7 |
R7 |
R7 |
R7 |
R7 |
|
SP |
SP_flq |
SP_svc |
SP_abt |
SP_irq |
SP_und |
|
LR |
LRfiq |
LR_svc |
LR_abt |
LR_irq |
LR_und |
|
PC |
PC |
PC |
PC |
PC |
PC |
|
CPSR |
CPSR |
CPSR |
CPSR |
CPSR |
CPSR |
|
SPSR_fiq |
SPSR_svc |
SPSR_abt |
SPSRJrq |
SPSR und |
В коде операции большинства команд THUMB под номер регистра отведено только 3 бита, поэтому прямое обращение возможно только к восьми регистрам: R0...R7. Регистры R8...R12 доступны только через специальные команды загрузки. Регистры SP и LR выполняют фиксированные функции указателя вершины стека и регистра связи, соответственно. В состоянии THUMB имеются специальные команды, ориентированные на работу с этими регистрами: загрузка в стек проходит только через регистр SP, адрес возврата из подпрограммы сохраняется только в регистре LR.
1.4.4. Система команд THUMB
Полный список команд ARM7TDMI-S для состояния THUMB приведен в Табл. 1.17. Для того чтобы уточнить синтаксис ассемблерных команд ARM7TDMI-S состояния THUMB, можно обратиться к источникам [10, 11], а также к файлам документации, которые находятся на прилагаемом к данной книге компакт-диске.
Таблица 1.17. Список команд THUMB
|
Описание |
Ассемблерная мнемоника |
Обновление флагов |
Действие |
|
Команды пересылки |
|||
|
Непосредственное значение |
MOV Rd, #<8bit_Imm> |
N.Z |
Rd:= 8bit_Imm (8-битное непосредственное значение) |
|
Из Lo в Lo |
MOV Rd, Rm |
N,Z |
Rd:= Rm (сбрасываются флаги ChV) |
|
Из Hi в Lo, из Lo в Hi, из Hi в Hi |
MOV Rd, Rm |
Rd:= Rm (нет из Lo в Lo; флаги не изменяются) |
|
|
Команды арифметические |
|||
|
Сложение с непосредственным 3-бит-ным значением |
ADD Rd, Rn, #<3bit_Imm> |
N, Z, С, V |
Rd:= Rn + 3bit_Imm (3-битное непосредственное значение) |
|
Сложение Lo с Lo |
ADD Rd, Rn, Rm |
N, Z, С, V |
Rd:= Rn + Rm |
|
Сложение Hi с Lo, LocHi, HicHi |
ADD Rd, Rm |
Rd:= Rn + Rm (нет Lo с Lo; флаги не изменяются) |
|
|
Сложение с непосредственным 8-битным значением |
ADD Rd, #<8bit_Imm> |
N, Z, С, V |
Rd:= Rd + 8bit_Imm (8-битное непосредственное значение) |
|
Сложение с учетом переноса |
ADC Rd, Rm |
N,Z,C,V |
Rd:= Rd + Rm + Carry |
|
Сложения значения с SP |
ADD SP, #<7*4bit_Imm > |
R13:= R13 + 7 * 4bit_Imm (9-битное непосредственное значение, выровненное в границах слова. Флаги не изменяются) |
|
|
Формирование адреса через SP |
ADD Rd, SP, #<8*4bit_Imm > |
Rd:= R13 + 8*4bit_Imm (10-битное непосредственное значение, выровненное в границах слова. Флаги не изменяются) |
|
|
Формирование адреса через PC |
ADD Rd, PC, #<8*4bit_Imm > |
Rd:= (R15 AND OxFFFFFFFC)+ + 8*4bit_Imm (10-битное непосредственное значение, выровненное в границах слова. Флаги не изменяются) |
|
|
Вычитание |
SUB Rd, Rn, Rm |
N, Z, С, V |
Rd:= Rn - Rm |
|
Вычитание непосредственного 3-битногозначения |
SUB Rd, Rn, #<3bit_lmm> |
N, Z, С, V |
Rd:= Rn - 3bit_Imm (3-битное непосредственное значение) |
|
Вычитание непосредственного 8-битного значения |
SUB Rd, #<8bit_Imm> |
N, Z, С, V |
Rd:= Rd - 8bit_Imm (8-битное непосредственное значение) |
|
Вычитание с учетом заема |
SBC Rd, Rm |
N, Z, С, V |
Rd:= Rd - Rm - NOT(Carry) |
|
Вычитание значения из SP |
SUB SP, #<7*4bit_lmm > |
R13:= R13 - 7*4bit_Imm (9-битное непосредственное значение, выровненное в границах слова. Флаги не изменяются) |
|
|
Смена знака (негатив) |
NEG Rd, Rm |
N,Z, C,V |
Rd:= - Rm |
|
Умножение |
MUL Rd, Rm |
N, Z, |
Rd:= Rd * Rm (флаги С и V) |
Таблица 1.17. Список команд THUMB (продолжение)
| НА ГЛАВНУЮ | | ЧТО ТАКОЕ PIC ? | | ПРОГРАММАТОР | | ПРОЕКТЫ | | СТАТЬИ | | ССЫЛКИ | | КАРТА САЙТА |