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

Левый сдвиг на n позиций соответствует умножению сдвигаемого числа на 2n, а правый – делению сдвигаемого числа на 2n, если рассматривать сдвигаемое число как беззнаковое.

4.8.3 Циклический сдвиг вправо

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

4.8.4 Циклический сдвиг вправо на одну позицию с переносом

При циклическом сдвиге на одну позицию с переносом, освобождающаяся позиция слева заполняется значением флага переноса С из регистра состояния программы. А младший разряд, уходящий за пределы разрядной сетки копируется в флаг переноса С, но только если в команде использован суффикс S.

4.9Примеры

 

Листинг 3. Примеры команд с различными форматами

 

 

записи универсального операнда:

 

 

 

sub

r3, r2, r1, lsl #4

@ Сдвинуть значение r1 влево на 4 позиции,

 

 

@ вычесть его из r2 и поместить результат в r3.

 

 

@ Универс. операнд — по выражениям (4) и (5).

mov

r2, r5, asr r6

@ Значение r1 не меняется.

@ Поместить в r2 содержимое регистра r5,

 

 

@ арифметически сдвинутого вправо на количество

 

 

@ позиций, содержащееся в младшем байте регистра r6

 

 

@ Универсальный операнд сформирован по выражениям

ands

r1, r2, r3

@ (4) и (6). Значение r5 не меняется.

@ Прибавить к значению регистра r2 значение

 

 

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

 

 

@ обновить флаги условий.

 

 

@ Универсальный операнд записан в соответствии

orr

r1, r2, #0xFF000000

@ с выражением (4) без указания сдвиговой операции

@ Выполнить операцию «логическое ИЛИ» между

 

 

@ значением регистра r2 и числом 0xFF000000,

 

 

@ записав результат в регистр r1.

add

r1, r2, r5, lsl #3

@ Универсальный операнд — по выражению (3).

@ Сдвинуть значение r5 влево на 3 позиции,

 

 

@ прибавить к r2 и поместить результат в r1.

sub

r2, r3, r5, lsr r6

@ Универс. операнд — по выражениям (4) и (5)

@ Сдвинуть значение r5 вправо на значение

 

 

@ младшего байта регистра r6, вычесть из r3

 

 

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

 

 

@ Универс. операнд — по выражениям (4) и (6)

15