Скачиваний:
66
Добавлен:
01.05.2014
Размер:
1.22 Mб
Скачать

Команда записи полуслова в регистр (Load Register Halfword)

Синтаксис в ассемблере

LDR{<cond>}H <Rd>, <addressing mode>

Формат команды представлен на рис. 1.

Описание

<cond> – поле условия (см. таблицу 1).

<Rd> – регистр результата (см. таблицу 1).

<addressing mode> – способ адресации, определяет I, P, U, W, Rn и addr_mode биты команды.

Команда LDRB (Load Register Byte) загружает байт из памяти по адресу, вычисленному с помощью <addressing mode>, дополняет байт нулями до 32-ух разрядного слова и записывает это слово в регистр <Rd>.

Примеры

LDRHR5, [R9]

в регистр R5 записывается полуслово хранящееся по адресу R9.

(старшие 2 байта нули)

LDRHR8, [R3, #4]

в регистр R8 записывается полуслово хранящееся по адресу R3 + 4.

LDRHR8, [R3, -#4]

в регистр R8 записывается полуслово хранящееся по адресу R3 - 4.

LDRHR8, [R3,R6]

в регистр R8 записывается полуслово хранящееся по адресу R3 +R6.

LDRR8, [R3],R2

в регистр R8 записывается полуслово хранящееся по адресу R3, затемR3 =R3 +R2.

LDRHTHUMB

Команда записи полуслова в регистр (Load Register Halfword)

Синтаксис в ассемблере

LDRН <Rd>, [<Rn>,< Rm>] (регистрировое смещение)

LDRН <Rd>, [<Rn>, #<immed_5>*2] (непосредственное смещение)

Формат команды представлен на рис. 2.

Описание

<Rd> – регистр результата (см. таблицу 1).

<Rn> – регистр первого операнда (см. таблицу 1).

<Rm> – регистр второго операнда (см. таблицу 1).

<immed_5>*2 – 5-разрядное непосредственное смещение (см. таблицу 1).

Команда LDRН выполняет чтение полуслова из памяти. Адрес должен быть разделен на 2. Данные загружаются в младшее полуслово регистра, а остальная часть регистра заполняется нулями.

Действие

Вычисляет адрес ячейки памяти посредством сложения содержимого регистров Rn и Rm (регистровое смещение) или #<immed_5>*2 (непосредственное смещение). Читает данные из ячейки памяти по этому адресу, деленному на 2, и загружает в младшее полуслово регистра Rd, а остальная часть регистра заполняется нулями. Флаги не формируются.

Использование

Команда LDRН используется, когда необходимо произвести чтение полуслова из памяти.

Примеры

LDRH R3, [R4, R2]

Прочитать полуслово без знака из памяти по адресу R2+R4 и записать его в младшую часть регистра R3, остаьную часть заполнить нулями.

LDRH R4, [R7, #4]

Прочитать из памяти полуслово по адресу R7+4 и записать его в младшую часть регистра R4, остальную часть заполнить нулями.

Примечание: в код команды будет помещено число 2.

LDRSB – ARM

Загрузка байта со знаком (Load Register Signed Byte)

Синтаксис в ассемблере:

LDR{<cond>}SB <Rd>, <addressing_mode>

формат команды загрузки байта со знаком

Описание

<cond> – поле условия (см. таблицу 1).

SB– устанавливаетS-бит и В-бит ­– биты условия (см. таблицу 1).

<Rd> – регистр первого операнда (см. таблицу 1).

<addressing mode> – способ адресации, определяетI, P, U, W, Rn и addr_mode биты команды.

Команда LDRSB производит загрузку одного байта из памяти по адресу, вычисленному с помощью <addressing_mode> и размещает его в младших 8-ми битах регистра-получателя, при этом все остальные биты этого регистра [31:8] заполняются одним и тем же значением - битом 7 байта, т.е. его знаком. В качестве Rd использует только регистры R0, R2, R4, R6, R8, R10, R12.

Действие

Если условие (<cond>) выполнено, то data = Memory [address, 1], (Rd) = (SignExtend(data)).

Использование

Задает способ адресации, позволяет загрузить 8-битное значение со знаком из памяти в регистр, для дальнейших манипуляций.

Примеры

LDRSB R3,[R8,#3] // Прочесть из памяти байт со знаком по адресу [R8+3] и записать его в R3

LDRSB R3,[R8] // Прочесть из памяти байт со знаком по адресу [R8] и записать его в R3

LDRSB R3,[R8,#-1]! // Прочесть из памяти байт со знаком по адресу [R8-1], записать его в R3, затем R8 = R8 - 1

LDRSB R3,[R8],#8 // Прочесть из памяти байт со знаком по адресу R8, записать его в R3, затем R8 = R8 + 3

LDRSBTHUMB