· ‑ Фиксированная длина команды (4 байта) ограничивает длину поля, которое в команде может быть отведено под непосредственный операнд. Это означает невозможность задать в этом поле значение непосредственной константы произвольным в диапазоне, определяемом разрядностью регистров, т.е. от 0 до 232.
В подавляющем большинстве требуемые значения непосредственной константы лежат в диапазоне единиц, десятков или сотен, и лишь весьма редко бывают нужны большие значения в диапазоне до 232-1, (определяемых разрядностью регистров) которых требует архитектура программной модели. Поэтому вполне допустимо иметь в команде поле ограниченной длины для непосредственной константы. Однако, как же в таком случае все-таки можно получить константу с произвольным значением ? Для этого в RISC-архитектурах используют несколько различных приемов, но все они требуют для формирования произвольной константы использовать более, чем одну команду (что допустимо с точки зрения экономии длины кода, так как произвольные «длинные» константы нужны нечасто).
Для задания непосредственного операнда в командах набора ARM отведено 8 битов. Однако, перед выполнением операции, предписываемой командой, процессор выполняет циклический сдвиг этой константы вправо. Количество сдвигов задается в той же команде в 4-битовом поле и равно удвоенному содержимому этого поля. Таким образом, количество сдвигов может быть равно 0, 2, 4,…26, 28, 30, а общая длина поля непосредственного операнда составляет 12 битов.
Этот же прием (возможность в той же команде выполнить сдвиг одного из операндов перед выполнением операции, предписываемой командой) используется в большинстве команд копирования и обработки. Это позволяет во многих случаях, совмещая сдвиг с другими операциями, уменьшить количество команд. Этим же объясняется отсутствие в наборе ARM отдельных команд сдвига. Для обозначения специфического (подвергаемого сдвигу) операнда в англоязычных описаниях используется словосочетание shifter operand. В данном тексте в дальнейшем будем использовать русскоязычный эквивалент «С-операнд». С-операндом может быть кроме уже рассмотренного случая непосредственной константы, также 32-битовое содержимое РОН, при этом при этом программист может задать одну из четырех разновидностей сдвига, а также любое количество сдвигов от 0 до 31. Более подробно об особенностях С-операнда в различных командах следует смотреть в описаниях отдельных команд.Рассмотрим состав системы команд ARM, ведя описание по функциональным группам команд.
Традиционно эту группу команд именуют командами пересылки, однако термин «пересылка» по смыслу своему предполагает операцию перемещения, когда перемещаемый объект появляется в месте назначения (операнд-приёмник) и прекращает своё существование в источнике. Правильнее называть подобные команды командами «копирования», как это делает, в частности, патриарх компьютерной науки Эндрю Танненбаум (Andrew Tannenbaum) в своём фундаментальном учебнике Structured Computer Organisation, четвертое издание которого издано в России в 2002 году под названием «Архитектура компьютеров».
LDR загрузка слова в регистр из памяти
LDRH загрузка беззнакового полуслова в регистр из памяти (с расширением «нулями»).
LDRB загрузка беззнакового байта в регистр из памяти (с расширением «нулями»).
LDRSH загрузка полуслова в регистр с расширением знака.
LDRSB загрузка байта в регистр с расширением знака
LDRT загрузка слова в регистр с трансляцией
LDRBT загрузка байта в регистр с трансляцией
STR сохранение слова из регистра в память
STRH сохранение полуслова из регистра в память
STRB сохранение байта из регистра в память
STRT сохранение слова из регистра в память с трансляцией
STRBT сохранение байта из регистра в память с трансляцией
STM множественное сохранение ‑ при выполнении этой команды в память записывается содержимое некоторых (или всех 16) регистров общего назначения. Перечень сохраняемых регистров задается в команде битовой маской, и может быть произвольным.
LDM множественная загрузка – при выполнении этой команды из памяти восстанавливаются значения некоторых (или всех16) регистров общего назначения, перечень регистров задается в команде битовой маской.
MOV копирование содержимого одного РОН (содержащего С-операнд, так что, возможно, со сдвигом) в другой РОН.
MVN копирование инвертированного содержимого одного РОН (содержащего С-операнд, так что, возможно, со сдвигом) в другой РОН.
MRS копирование содержимого РОН в активный (соответствующий текущему режиму) регистр состояния.
MSR копирование активного (соответствующего текущему режиму) регистра состояния в РОН.
SWP обмен содержимым (32-битовым словом) между элементом в памяти и регистрами.
SWPB обмен байтовым элементом данных между байтом памяти и регистрами.
ADD сложение С-операнда и содержимого РОН и помещение результата сложения в РОН (может быть, на место одного из операндов)..
ADC сложение С-операнда и содержимого РОН с учетом переноса (carry-флага) и помещение результата сложения в РОН (может быть, на место одного из операндов).
SUB вычитание С-операнда из содержимого РОН и помещение результата в РОН (может быть, на место одного из операндов).
SBC вычитание С-операнда из содержимого РОН с учетом заема (carry-флага) и помещение результата в РОН (может быть, на место одного из операндов).
RSB «обратное» вычитание: содержимое РОН вычитается из С-операнда, результат помещается в РОН (может быть, на место одного из операндов).
RSC «обратное» вычитание с заемом: содержимое РОН вычитается из С-операнда с учетом значения carry-флага, результат помещается в РОН (может быть, на место одного из операндов
MUL умножение содержимого РОН на содержимое РОН (другого, либо того же самого) и помещение «короткого» (32-битового) произведения в РОН (может быть на место одного из сомножителей).
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.