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

Команда загрузки знакового байта (Load Register Signed Byte)

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

LDRSB<Rd>, [<Rn>, <Rm>]

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

Описание

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

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

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

Команда LDRSBзагружает из памяти байт, расположенный по адресу определенному выражениемaddress= <Rn> + <Rm>, расширяет его до 32-битного слова с учетом знака и записывает в регистр <Rd>.

Действие

(Rd) = SignExtend(memory[address, 1]).

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

Команда LDRSB используется, когда необходимо загрузить 8-битное знаковое значение в регистр общего назначения для проведения последующих операций с ним. При использовании регистра PC в качестве базового адреса позволяет использовать PC-относительную адресацию, что облегчает написание позиционно-независимого кода.

Примеры

LDRSBR5, [R9, #16]

В регистр R5 из памяти загружается байт расположенный по адресу хранящемуся в R9+16.

LDRSH – ARM

Загрузка полуслова со знаком (Load Register Signed Halfword)

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

LDR{<cond>}SН <Rd>, <addressing_mode>

формат команды загрузки полуслова со знаком

Описание

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

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

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

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

Команда LDRSH производит загрузку полуслова из памяти и размещает его в младших 16-ти битах регистра-получателя, при этом все остальные биты этого регистра [31:16] заполняются одним и тем же значением - битом 15 этого полуслова, т.е. его знаком.

Действие

Если условие (<cond>) выполнено, и если address[0] = = 0, то data = Memory [address, 2], иначе (address[0] = = 1) data = U npredictable. Выполняется (Rd) = (SignExtend(data)).

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

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

Примеры

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

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

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

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

LDRSHTHUMB

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

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

LDRSH<Rd>, [<Rn>, <Rm>]

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

Описание

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

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

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

Команда LDRSHзагружает полуслово из памяти по адресу (<Rn> + <Rm>) в 32-битное слово с расширением знака, и затем помещает его в универсальный регистр <Rd>. Если адрес, по которому считывается полуслово, не выровнен по чётным адресам, то результат выполнения операции не предсказуем.

Действие

(Rd) = SignExtend((Rn) + (Rm)). Если адрес (Rn) + (Rm) не выровнен по чётным значениям, то результат команды не предсказуем.

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

Команда LDRSHиспользуется, когда необходимо записать в регистр (<Rd> имеет разрядность 32 бита) 16-битное знаковое число из памяти.

Примеры

LDRSHR0, [R1,R2]

Загружает в регистр R0 число, которое располагается в памяти по адресу (R1 +R2).

LSL(1) – THUMB