- •1 Общие сведения
- •1.1 Типы данных
- •1.2 Регистры общего назначения
- •1.3 Регистр состояния программы
- •1.4 Набор инструкций ARM
- •2 Флаги условий
- •3 Предикаты выполнения команды
- •4 Команды обработки данных
- •4.1 Условные обозначения
- •4.2 Форматы записи универсального операнда
- •4.3 Форматы записи команд обработки данных
- •4.4 Арифметические операции
- •4.5 Логические операции
- •4.6 Операции простой пересылки
- •4.7 Операции сравнения и проверки
- •4.8 Сдвиговые операции при формировании второго операнда
- •4.8.1 Арифметический сдвиг вправо
- •4.8.2 Логические сдвиги
- •4.8.3 Циклический сдвиг вправо
- •4.8.4 Циклический сдвиг вправо на одну позицию с переносом
- •4.9 Примеры
- •5 Команды передачи управления
- •5.1 Условные обозначения
- •5.2 Форматы записи команд передачи управления
- •5.3 Переход на метку
- •5.4 Переход по адресу в регистре
- •5.5 Вызов подпрограммы
- •5.6 Вызов подпрограммы по адресу в регистре
- •5.7 Вызов подпрограммы со сменой набора инструкций
- •6 Команды доступа к памяти (пересылки данных)
- •6.1 Условные обозначения
- •6.2 Форматы записи выражения, формирующего адрес, и виды адресации
- •6.3 Режимы пересылки
- •6.4 Особенности использования различных команд пересылки
- •6.5 Примеры использования команд пересылки
- •7 Команды умножения
- •7.1 Условные обозначения
- •7.2 Простое умножение
- •7.3 «Длинное» умножение
- •8 Псевдоинструкции
- •8.1 Псевдоинструкция ldr
8Псевдоинструкции
8.1Псевдоинструкция ldr
Внаборе команд ARM все инструкции имеют размер, равный 4м байтам (32 бита), поэтому не существует такой команды, которая могла бы загрузить в регистр непосредственно адресуемое (т. е. расположенное в теле инструкции) произвольное 32-разрядное число. В случае, если это число представимо в виде 8-разрядного числа, сдвинутого по кругу на определённое чётное количество позиций, можно воспользоваться командой простой пересылки mov (см. п. 4.6). В противном случае, для загрузки числа в регистр необходимо, чтобы оно было где-то размещено в памяти и загружалось в регистр с использованием относительной (индексной) адресации.
Для того, чтобы упростить решение проблемы загрузки в регистры произвольных 32-разрядных чисел в набор инструкций ARM была введена псевдо-инструкция lrd, имеющая следующие форматы записи:
ldr{cond} Rd,=expr |
(10) |
ldr{cond} Rd,=label |
(11) |
где Rd — это регистр назначения; expr — произвольное 32-разрядное число; label — метка в тексте программы.
При компиляции исходного текста программы, компилятор проверяет, существует ли возможность загрузить необходимое число в память с использованием команды mov или mvn. И если это возможно, то псевдоинструкция заменяется на соответствующую инструкцию простой пересылки. В противном случае, компилятор располагает число в некоторой области памяти (обычно располагающейся сразу после последней инструкции программы) и генерирует инструкцию ldr, которая загружает это число с использованием относительной адресации (т. е. индексной относительно текущего значения регистра PC).
27
Редактор
¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾
Подписано в печать |
Формат 60´84 |
1/16. Бумага офсетная. |
|
Печать офсетная. Печ. л. 2.0. |
|
|
Тираж 30 экз. Заказ |
|
¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾
Издательство СПбГЭТУ "ЛЭТИ" 197376, С.-Петербург, ул. Проф. Попова, 5
28