Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

Общий формат команд в режиме ARM.

Поиск

 

 

Формат построения системы команд в режиме ARM

Примечание: некоторые коды команд не определены, но в то же время их выполнение не вызывает исключения "неизвестная команда" (Undefined instruction exception), кроме команды умножения с установленным в "1" битом 6. Эти команды не должны применяться, хотя, некоторые из них могут быть реализованы в новых версиях ядра ARM.

 

4. Машинные команды ARM.

 

Система команд в режиме ARM

 

Мнемоника Команда Действие
ADC Сложение с переносом Rd:= Rn + Op2 + перенос
ADD Сложение Rd:= Rn + Op2
AND Логическое И Rd:= Rn AND Op2
B Переход R15:= адрес
BIC Очистить бит Rd:= Rn AND NOT Op2
BL Переход со ссылкой R14:= R15, R15:= адрес
BX Переход и переключение режима ядра R15:= Rn, T бит:= Rn[0]
CDP Обработать данные сопроцессором (зависит от типа сопроцессора)
CMN Сравнить с отрицательным операндом CPSR флаги:= Rn + Op2
CMP Сравнение CPSR флаги:= Rn - Op2
EOR Исключающее ИЛИ Rd:= (Rn AND NOT Op2) OR (op2 AND NOT Rn)
LDC Загрузить в сопроцессор из памяти Загрузить в сопроцессор
LDM Загрузить сразу несколько регистров Манипуляции со стеком (Pop)
LDR Загрузить регистр из памяти по указанному адресу Rd:= (адрес)
MCR Скопировать регистр CPU в регистр сопроцессора cRn:= rRn {<op>cRm}
MLA Умножение со сложением Rd:= (Rm * Rs) + Rn
MOV Загрузить в регистр константу Rd: = Op2
MRC Скопировать регистр сопроцессора в регистр CPU Rn:= cRn {<op>cRm}
MRS Переместить регистр статуса/флагов PSR в регистр Rn Rn:= PSR
MSR Загрузить в PSR статус/флаги указанный регистр PSR:= Rm
MUL Умножение Rd:= Rm * Rs
MVN Загрузить регистр отрицательной константой Rd:= 0xFFFFFFFF EOR Op2
ORR Логическое ИЛИ Rd:= Rn OR Op2
RSB Обратное вычитание Rd:= Op2 - Rn
RSC Обратное вычитание с переносом Rd:= Op2 - Rn - 1 + Перенос
SBC Вычитание с переносом Rd:= Rn - Op2 - 1 + Перенос
STC Сохранить регистр сопроцессора в памяти адрес:= CRn
STM Сохранить сразу несколько регистров Манипуляции со стеком (Push)
STR Сохранить регистр в памяти <адрес>:= Rd
SUB Вычитание Rd:= Rn - Op2
SWI Программное прерывание Вызывается операционной системой
SWP Обменять местами содержимое регистра и памяти Rd:= [Rn], [Rn]:= Rm
TEQ Побитовая проверка на равенство CPSR флаги:= Rn EOR Op2
TST Проверка битов CPSR флаги:= Rn AND Op2

 

Поле условия.

 

В режиме ARM все команды выполняются в зависимости состоянию регистра CPSR и поля условия самой команды. Это поле (биты 31:28) содержит условие, при которых команда будет выполнена. Если флаги C, N, Z и V установлены (сброшены) согласно коду поля условия, то команда будет выполнена, в противном случае эта команда будет проигнорирована.

Всего существуют 16 различных условий, каждое из которых определяется двухсимвольным суффиксом, добавляемым к мнемонике команды. Например, команда переход (Branch - "B" в ассемблере) становится командой перейти, если равно - BEQ (Branch if Equal), которая означает, что переход будет выполнен, если установлен флаг Z.

Практически можно использовать только 15 различных условий, 16-е условие (1111) зарезервировано и не применяется.

При отсутствии в мнемонике команды условия выполнения или установлен суффикс AL, то эта команда будет выполнена безусловно, независимо от состояния флагов условия (регистр CPSR).

 


Перечень условий выполнения.

 

Код Суффикс Флаги Значение
0000 EQ Z установлен Равно
0001 NE Z сброшен Не равно
0010 CS C установлен Выше или равно
0011 CC C сброшен Ниже
0100 MI N установлен Отрицательный результат
0101 PL N сброшен Положительный результат либо ноль
0110 VS V установлен Переполнение
0111 VC V сброшен Нет переполнения
1000 HI C установлен and Z сброшен Выше
1001 LS C сброшен or Z установлен Ниже или равно
1010 GE N равно V Больше или равно
1011 LT N не равно V Меньше
1100 GT Z сброшен AND (N равно V) Больше
1101 LE Z установлен OR (N не равно V) Меньше или равно
1110 AL (проигнорировано) Всегда

 

Обработка данных.

 

Эта команда будет выполнена, если условие истинно. Все различные условия перечислены ниже. Машинный код команды приведен на рисунке.

 

Команда обработки данных

 

Команда формирует результат, выполняя указанную арифметическую или логическую операцию с одним или двумя операндами.

Первый операнд - всегда регистр (Rn). Второй операнд может быть регистром со сдвигом (Rm), или 8-битной константой с циклическим сдвигом (Imm) (в зависимости от значения бита "I" в команде). Флаги CPSR могут оставаться без изменений (S = 0) или выставлены в зависимости от результата выполнения этой команды (S = 1). Некоторые операции в команде (ТЕСТ, TEQ, CMP, CMN) не записывают результат в регистр Rd. Они используются только для того, чтобы в зависимости от результата установить/сбросить флаги CPSR (только при S = 1). Команды и результаты их работы перечислены в таблице ниже.

 

Флаги регистра CPSR

 

Все операции обработки данных разделяются на: логические и арифметические. Логические операции (AND, EOR, ТЕSТ, TEQ, ORR, MOV, BIC, MVN) выполняют логические побитовые операции на всех битах операнда или операндов. Если бит команды "S" будет установлен (и Rd - это не R15, см. ниже), то состояние флага "V" в регистре CPSR не изменится; флаг переноса "C" будет установлен исходя из результата многорегистрового циклического сдвига (или останется без изменений, если операция изменения сдвига - LSL #0). Флаг "Z" будет установлен, только если результат - все нули, и флаг "N" будет установлен в зависимости от значения бита 31 результата операции.

Арифметические операции (SUB, RSB, ADD, ADC, SBC, RSC, CMP, CMN) обрабатывают каждый операнд как 32-битное целое число (беззнаковое или знаковое с дополнением до 2-х, что, впрочем, эквивалентно). Если бит "S" будет установлен (и Rd - это не R15) и произойдет переполнение результата, то флаг "V" в регистре CPSR будет установлен. Однако, этот флаг можно игнорировать, если операнды - беззнаковые, но обязательно нужно учитывать для знаковых операндов. Флаг "C" будет установлен при переносе бита 31 из ALU (переполнение). Флаг "Z" будет установлен, только если результат нулевой. Флаг "N" будет установлен в зависимости от значения бита 31 результата операции (указывает на отрицательный результат, если предполагается, что операнды есть знаковые с дополнением до 2-х).

 



Поделиться:


Последнее изменение этой страницы: 2021-12-07; просмотров: 76; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 3.140.188.195 (0.01 с.)