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

таблице 10.

Таблица 10: Сводная таблица форматов команд пересылки

 

Загрузка

Сохранение

Беззнаковое

ldr{cond} Rd, [Rn], Offset

str{cond} Rd, [Rn], Offset

слово

ldr{cond} Rd, [Rn, Offset]{!}

str{cond} Rd, [Rn, Offset]{!}

 

ldr{cond} Rd, [Rn]

str{cond} Rd, [Rn]

 

ldr{cond} Rd, label

str{cond} Rd, label

Знаковое

ldr{cond}sh Rd, [Rn], Offset

(См. сохранение беззнакового

полуслово

ldr{cond}sh Rd, [Rn, Offset]{!}

полуслова)

 

ldr{cond}sh Rd, [Rn]

 

 

ldr{cond}sh Rd, label

 

Беззнаковое

ldr{cond}h Rd, [Rn], Offset

str{cond}h Rd, [Rn], Offset

полуслово

ldr{cond}h Rd, [Rn, Offset]{!}

str{cond}h Rd, [Rn, Offset]{!}

 

ldr{cond}h Rd, [Rn]

str{cond}h Rd, [Rn]

 

ldr{cond}h Rd, label

str{cond}h Rd, label

Знаковый

ldr{cond}sb Rd, [Rn], Offset

(См. сохранение беззнакового байта)

байт

ldr{cond}sb Rd, [Rn, Offset]{!}

 

 

ldr{cond}sb Rd, [Rn]

 

 

ldr{cond}sb Rd, label

 

Беззнаковый

ldr{cond}b Rd, [Rn], Offset

str{cond}b Rd, [Rn], Offset

байт

ldr{cond}b Rd, [Rn, Offset]{!}

str{cond}b Rd, [Rn, Offset]{!}

 

ldr{cond}b Rd, [Rn]

str{cond}b Rd, [Rn]

 

ldr{cond}b Rd, label

str{cond}b Rd, label

6.4Особенности использования различных команд пересылки

Взависимости от используемой инструкции существуют ограничения на величину смещения в тех командах, где оно размещается непосредственно в теле инструкции. К таким инструкциям относятся загрузка и сохранение с использованием относительной адресации (смещение вычисляется автоматически на основе указанной метки label; см. рис. 2), а также предындексной или постиндексной адресации с непосредственно заданным смещением (выражение #expr на рис. 2). Диапазоны допустимых значений смещений приведены в таблице 11.

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

Все указанные ограничения проверяются автоматически на этапе компиляции.

23

Таблица 11: Ограничения на величину смещения в некоторых командах пересылки

 

 

Ограничения

 

 

 

Вид команды

 

label

#expr

 

 

 

 

 

 

 

 

Пересылка слов

или

Метка label должна находится в диапазоне

Expr должно

быть

в

беззнаковых байтов

[-4095; +4095] от значения программного

диапазоне

 

 

 

 

счётчика при выполнении инструкции.

[-4095; +4095]

 

 

Пересылка

 

Метка label должна находится в диапазоне

Expr должно

быть

в

знаковых/беззнаковых

[-255; +255] от значения программного

диапазоне

 

 

полуслов

или

счётчика при выполнении инструкции.

[-255; +255]

 

 

знаковых байтов

 

 

 

 

 

6.5Примеры использования команд пересылки

Листинг 5. Пример использования команд пересылки для модификации данных в памяти

ldr

r2, =var

@ Загрузить

в r2

адрес, соответствующий метке var;

ldr

r1, [r2]

@ Загрузить

в

r1

значение

числа, расположенного в памяти по

add

r1,

r4

@ адресу, лежащему в r2

значение r4; результат записать в r1

@

Прибавить

к

значению

r1

str

r1,

[r2]

@

Сохранить

r1 обратно

по

тому же адресу

Листинг 6. Пример использования команд пересылки с различными видами адресации

array:

16

 

.word

 

.word

32

 

.word

64

 

.word

128

 

test:

r1, =array;

@ Загрузка адреса array в r1(псевдоинструкция)

ldr

ldr

r2, [r1], #4

@ Постиндексная адресация; r2=16

ldr

r3, [r1, #4]

@ Предындексная адресация (не автоинкр.); r3=64

ldr

r4, [r1, #8]!

@ Предындексная автоинкрементная; r4=128

ldr

r5, [r1, #-12]!

@ Предындексная автоинкрементная; r5=16

ldr

r6, array+8;

@ Относительная адресация; r6=64

ldr

r7, array+4;

@ Относительная; r7=32

ldr

r8, [r1];

@ Косвенная; r8=16

Листинг 7. Пример использования команд пересылки при работе со знаковыми числами

.section .text.program data_consts:

.hword -32000

.hword -768;

.align

test:

ldrsh

r1,

data_consts

+ 2

@

Загрузить

знаковое

слово

(-32000)

ldrsh

r2,

data_consts

@

Загрузить

знаковое

слово

(-768)

24