Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Основные сведения о ARM.pdf
Скачиваний:
113
Добавлен:
18.05.2014
Размер:
482.2 Кб
Скачать

 

 

 

Листинг 1: Пример реализации условного выполнения

 

 

 

инструкций с использованием предикативных суффиксов

 

 

 

 

cmp r3,

r4

@

Сравнить значения регистров r3 и r4 (произойдёт

addgt r5,

 

@

обновление флагов, cmp всегда обновляет флаги)

r5, #22 @

Если r3>r4, прибавить к r5 число 22, результат записать в r5

moveq r3,

#0

@

А если r3 было равно r4, тогда обнулить r3

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

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

-арифметические операции (сложение, вычитание и их разновидности);

-логические операции («И», «ИЛИ» и др.);

-команды сравнения и проверки;

-команды простой пересылки данных в регистры.

Почти все команды обработки данных могут обновлять или не обновлять значения флагов условий регистра состояния программы в зависимости от наличия или отсутствия суффикса «s» в мнемонике команды. К исключениям относятся команды сравнения (cmp, cmn) и проверки (tst, teq), которые всегда обновляют флаги и не поддерживают добавление суффикса «s».

4.1Условные обозначения

При описании формата записи команд обработки данных на языке ассемблера в последующих разделах будут использоваться следующие условные обозначения:

-op – мнемоника инструкции (например «add», «mov», «cmp»);

-{} — фигурные скобки; указывают, что содержащееся в них выражение не является обязательным и может быть опущено;

-{cond} — необязательный предикативный суффикс для реализации условного выполнения команды (подробнее см. п. 2)

-{s} — суффикс, указывающий, что инструкция при выполнении обновляет флаги условий в регистре состояния программы. Если этот суффикс не указан, то флаги условий не изменяются;

-Rd — операнд назначения, т. е. регистр, в который будет записан результат выполнения команды;

-Rn — первый исходный операнд;

-Rdn — операнд, являющийся первым исходным операндом и операндом назначения одновременно; текущее значение регистра будет использовано при выполнении операции, после чего результат будет записан в тот же регистр;

9

-Operand2 — второй исходный операнд, также называемый универсальным операндом, или «shifter_register» (см. п. 4.2).

Например, формату записи арифметических команд

 

op{cond}{s} Rd, Rn, Operand2

(1)

соответствует команда

 

addgts r6, r5, #22,

(2)

где «add» — мнемоника команды; «gt» — предикативный суффикс; «s» — суффикс, предписывающий выполнить обновление флагов условий, «r6» — операнд назначения, «r5» — первый исходный операнд, «#22» — второй исходный операнд (он же — «универсальный операнд»);

Примеры команд обработки данных приведены в листинге 2.

 

 

 

Листинг 2. Примеры команд обработки данных

 

 

 

add

r1, #5

@ Добавить 5 к значению регистра r1

sub

r0,

r1

@ Вычесть значение регистра r1 из значения регистра r0

and

r3,

r1, r0

@ и сохранить результат в r0

@ Произвести операцию «логическое И» над значениями

orrs

r4,

r2

@ регистров r1 и r0, сохранив результат в регистре r3

@ Произвести операцию «логическое ИЛИ», сохранив результат

 

 

 

@ в r4 и установив флаги условий в регистре состояния

cmp

r4,

#1

@ программы

@ Сравнить значение r4 с числом 1, выполнив вычитание;

moveq r1,

#10

@ обновить флаги, но не сохранять результат.

@ Если был установлен флаг Z (т. е. r4 равно 1),

 

 

 

@ загрузить в r1 число 10.

4.2Форматы записи универсального операнда

Для записи второго исходного операнда (Operand2) используется один из следующих форматов (см. рис. 1):

#immed8r,

(3)

Rm {, shift},

(4)

где immed8r – целое 32-разрядное число, представимое в виде 8-разрядного числа, сдвинутого по кругу на чётное число позиций; Rm — регистр, значение которого является основой для формирования второго исходного операнда; это значение может быть сдвинуто определённым образом, если указать способ сдвига и количества позиций (shift).

10

Способ и количество позиций сдвига shift указывается с использованием одного из 2х форматов:

ShType #n,

(5)

ShType Rs,

(6)

где «ShType» — вид сдвиговой операции (подробнее см. п. 4.8); «n» — количество позиций, на которое нужно осуществить сдвиг; «Rs» — регистр, значение младшего байта которого используется как величина сдвига.

В листинге 3 приведены примеры команд с различными форматами записи универсального операнда, а также даны комментарии для каждой команды.

Рис. 1: Схема формата записи универсального операнда в командах обработки данных

4.3Форматы записи команд обработки данных

Различные виды команд обработки данных записываются с использованием различных форматов, представленных в таблице 4.

Таблица 4: Форматы записи команд обработки данных

Вид команд

Мнемоники

Формат записи

Арифметические

add, sub, rsb,

op{cond}{s} Rd, Rn, Operand2

 

adc, sbc, rsc

op{cond}{s} Rdn, Operand2

Логические

and, orr, eor,

op{cond}{s} Rd, Rn, Operand2

 

bic

op{cond}{s} Rdn, Operand2

Простой пересылки

mov, mvn

op{cond}{s} Rd, Operand2

Сравнения и проверки

cmp, cmn, tst,

op{cond} Rn, Operand2

 

teq

 

4.4 Арифметические операции

Форматы записи арифметических операций:

11

op{cond}{s} Rd, Rn, Operand2 op{cond}{s} Rdn, Operand2

Мнемоника

Расшифровка

 

Описание

 

 

 

 

add

add

Сложение

Складывает первый исходный операнд (Rn /

 

 

 

Rdn) со вторым (Operand2) и записывает

 

 

 

результат в операнд назначения (Rd / Rdn).

sub

substract

Вычитание

Из первого операнда (Rn / Rdn) вычитает

 

 

 

значение второго операнда (Operand2),

 

 

 

помещая результат в операнд назначения (Rd /

 

 

 

Rdn).

rsb

reverse

Обратное

Из второго операнда вычитает значение

 

substract

вычитание

первого , помещая результат в операнд

 

 

 

назначения.

adc

add with carry

Сложение с

Складывает первый исходный операнд со

 

 

переносом

вторым операндом и битом переноса (С),

 

 

 

помещая результат в операнд назначения.

sbc

substract with

Вычитание с

Из первого операнда вычитает значение

 

carry

переносом

второго, при этом уменьшая результат на

 

 

 

единицу, если флаг С сброшен.

rsc

reverse

Обратное

Из второго операнда вычитает значение

 

substract with

вычитание с

первого, при этом уменьшая результат на

 

carry

переносом

единицу, если флаг С сброшен.

4.5Логические операции

Форматы логических операций:

op{cond}{s} Rd, Rn, Operand2 op{cond}{s} Rdn, Operand2

Мнемоника

Расшифровка

Описание

Комментарии

 

 

 

 

and

and

Побитовое логическое "И"

 

 

 

 

 

orr

or

Побитовое логическое "ИЛИ"

 

 

 

 

 

eor

exclusive or

Побитовое логическое

 

 

 

"Исключающее ИЛИ"

 

bic

bit clear

Сброс битов по маске.

Используется для сброса (т. е.

 

 

(побитовое логическое "И" с

обнуления) тех разрядов

 

 

результатом применения

исходного операнда, которые

 

 

побитового "НЕ" над вторым

во втором операнде

 

 

операндом)

установлены.

12