ADC команда сложения с учетом содержимого carry-флага: складывает содержимое двух РОН и помещает результат на место одного из слагаемых.
SUB команда вычитания: вычитает из содержимого РОН содержимое другого РОН или непосредственную константу и помещает результат на место уменьшаемого.
SBC команда вычитания с учетом содержимого carry-флага: вычитает из содержимого РОН содержимое другого РОН и помещает результат на место вычитаемого.
MUL умножение содержимого РОН на содержимое другого (или того же самого) РОН.
NEG смена знака содержимого РОН
BIC очистка битов
EOR исключающее ИЛИ
MVN копирование в РОН инвертированного содержимого другого РОН
ORR
ASR
LSL
LSR
ROR
CMN сравнение с отрицательной величиной: выполняется сложение содержимого РОН с содержимым другого РОН, по результату сложения изменяется состояние флагов в регистре состояний, после чего результат сложения теряется. (??? описание команды уточнить)
CMP сравнение
TST проверка битов
B Передача управления (может быть условная)
BL Вызов подпрограммы THUMB
BLX Вызов подпрограммы ARM
BX Безусловная передача управления с переключением в режим ARM.
BKPT Программное прерывание для отладочных целей
SWI Программное прерывание для вызова сервисов ОС
Почти все команды в архитектуре ARM могут быть выполнены условно (т.е. лишь при наличии заданной комбинации флагов C,Z,N,V). Для указания условия в каждой команде служит поле cond.
Большинство команд обработки трех-операндные. Из двух операндов-источников один – обязательно регистр. Второй может быть непосредственным операндом либо содержаться в регистре. Если второй операнд-источник находится в регистре, к нему перед выполнением операции может быть применена операция сдвига. Поэтому второй операнд-источник называют shifter-operand.
Загрузка заранее известного программисту значения в регистр общего назначения может понадобиться в двух случаях: 1) непосредственный операнд, например, начальное значение счетчика в циклической конструкции с заранее известным числом повторений; 2) адрес объекта, который далее будет использован в командах с косвенно-регистровой адресацией; 3) смещение относительно базового адреса в командах с адресацией косвенно-регистровой со смещением (смещение может содержаться либо как константа в команде, либо предварительно загружаться в регистр - ??? пояснить).
Непосредственный операнд в командах с непосредственной адресацией задается 8-битовой константой, которая перед выполнением команды может быть циклически сдвинута на четное число позиций: 0, 2, ….30. Для задания непосредственного операнда в команде используется два поля: 8 битов содержат собственно цифры константы, а поле сдвига (4 бита) определяет количество циклических сдвигов. Операция формирования константы показана на рисунке для случая, когда поле сдвига содержит значение 1001b=9, что задает циклический сдвиг (ротацию) исходной константы (вправо) на 9*2=18 позиций.
В таблице приведено несколько примеров для разных значений поля константы и поля сдвига.
Поле цифр |
Поле сдвига |
Значение непосредственного операнда после ротации |
|
1 |
000000012 |
00002 |
0х00000001 = 1 (нет ротации) |
2 |
000000012 |
11112 |
0х00000004 = 4 (ротация вправо на 15*2=30 позиций) |
3 |
000000012 |
00012 |
0x40000000 = 230 (ротация вправо на 1*2=2 позиции) |
4 |
000011112 |
10002 |
0x000F0000 = 220 - 216 (ротация вправо на 16 позиций) |
5 |
111100002 |
10102 |
0x000F0000 = 220 - 216 (ротация вправо на 20 позиций) |
6 |
000001002 |
00102 |
0x40000000 = 230 (ротация вправо на 4 позиции) |
7 |
000000102 |
00102 |
0x20000000 = 229 (ротация вправо на 4 позиции) |
8 |
111111102 |
00002 |
0x000000FE (нет ротации) |
9 |
111111102 |
11112 |
0x000003F8 (ротация на 30 позиций) |
10 |
01111111 |
11112 |
0x000001FC (ротация на 30 позиций) |
Ясно, что таким способом можно сформировать далеко не все возможные 32-битовые значения, а только такие, в двоичной записи которых содержится не более 8-ми единиц, содержащихся в непрерывном участке длиной 8 битов (остальные позиции 32-битовой константы – нули). Более того, общее количество различных значений существенно меньше величины 212, так как некоторым различным сочетаниям полей цифр и сдвига может соответствовать одно и то же значение (см. в таблице строки 4 и 5). Однако, значения величин, которые могут быть сформированы таким образом, покрывают подавляющую часть потребностей программистов, так как чаще всего как раз и требуется формировать значения, лежащие в диапазоне от единиц до сотен.
Для получения непосредственных операндов или адресов во всем диапазоне, перекрываемом 32-битовой разрядной сеткой используется другой прием, состоящий в том, что заранее определяется константное слово данных, помещаемый компилятором или ассемблером в область данных, к которому затем транслятор организует доступ, используя адресацию со смещением относительно счетчика команд. таким образом можно получить любое значение константы, ценой затраты лишнего 4-байтового слова в области данных.
Литература
1. ARM Architecture Reference Manual. 1996-2000 ARM Limited. Document Number ARM DDI 0100E (www.arm.com/…).
2. ARM 7TDMI Data Sheet. 1995 ARM Limited. Document Number ARM DDI 0029E (www.arm.com/…).
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.