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

Загрузить сразу несколько регистров (Load Multiple)

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

LDM{<cond>}<addressing_mode> <Rn>{!}, <registers_and_pc>^

Описание

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

<addressing_mode> - определяет P, U, Rn, Вт и 8_bit_word_offset биты инструкции.

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

! –определяет будет ли производится запись в базовый регистр, и этот знак не опциональный. ( ! – разрешить запись вычисленного адреса обратно в базовый регистр). Во всех случаях, где не требуется модификация базового адреса (! – отсутствует), в Rn сохранится начальный адрес, кроме случая, когда этот регистр есть в списке передаваемых (<reglist>) в команде множественной загрузки, то тогда содержимое Rn будет перезаписано новым прочитанным значением.

<registers_and_pc > – Список регистров, отделенных запятыми и окруженный {и}. Этот список должен входить в PC, и определяет набор регистров, которые будут загружены командой LDM.

^ - Для команды LDM, которая не загружает PC, это указывает, что регистры в режиме пользователя могут быть загружены.

Действие

if ConditionPassed(cond) then

address = start_address

for i = 0 to 14

if register_list[i] == 1 then

Ri = Memory[address,4]

address = address + 4

CPSR = SPSR

value = Memory[address,4]

if (architecture version 4T, 5 or above) and (T Bit == 1) then

pc = value AND 0xFFFFFFFE

else

pc = value AND 0xFFFFFFFC

address = address + 4

assert end_address = address - 4

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

Команда LDM(3) полезна для возвращения из исключения. Она загружает подмножество регистров общего назначения и PC от последовательных местоположений памяти.

Примеры

LDMFD SP!,{R15} ; R15 <- (SP),CPSR не изменяется

LDMFD SP!,{R15}^ ; R15 <- (SP), CPSR <- SPSR_режим

; (только в привилегированном режиме).

LDM/STMARM

Команды множественной загрузки

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

LDM | STM {cond} <addressing_mode> <Rn>{!}, <registers>{^}

Описание

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

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

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

<addressing_mode> определяет один из четырех режимов адресации:

  1. IA (Increment After) Начальный адрес – содержимое базового регистра. Конечный адрес – содержимое базового регистра + (4 * количество регистров, указанных в поле <registers> - 4)

  2. IB (Increment Before) Начальный адрес – содержимое базового регистра + 4. Конечный адрес – содержимое базового регистра + (4 * количество регистров, указанных в поле <registers>)

  3. DA (Decrement After) Начальный адрес – содержимое базового регистра - (4 * количество регистров, указанных в поле <registers>) + 4. Конечный адрес – содержимое базового.

  4. DB (Decrement Before) Начальный адрес – содержимое базового регистра - (4 * количество регистров, указанных в поле <registers>). Конечный адрес – содержимое базового - 4.

Команды множественной загрузки (LDM) загружают некоторые (возможно все) регистры общего назначения данными из памяти. Команды множественного сохранения (STM) записывают данные из регистров общего назначения в память.

Эти команды обрабатывают последовательность адресов. Регистру с минимальным номером соответствует начальный адрес диапазона адресов памяти, а регистру с максимальным номером соответствует конечный адрес диапазона адресов памяти.

Бит P

Имеет два значения:

P==1 означает что ячейка памяти, адресованная регистромRn, включена в диапазон обработки.

P== 0 означает что ячейка памяти, адресованная регистромRn, находится на одно слово ниже или выше диапазона обработки в зависимости от направления обработки.

Бит U

Определяет направление обработки. Вперед (U== 1), или назад (U== 0)

Бит S

Для команд загрузки (LDM), которые загружают данные в регистрPC, битSозначает, что регистрCPSRзагружается из регистраSPSR. Для команд загрузки (LDM) которые не модифицируют регистрPCи для всех команд сохранения (STM) битSозначает, что когда процессор находится в привилегированном режиме, то передаются значения банка регистров вместо регистров текущего режима.

Бит W

Означает, что базовый регистр модифицируется при передаче данных. Базовый регистр увеличивается (U== 1) или уменьшается (U== 0) для реализации всех вышеперечисленных способов адресации (IA,IB,DA,DB).

Бит L

Различает команды загрузки (L== 1) и сохранения (L==0).

Register_list

Это поле команды имеет один бит на каждый регистр общего назначения. Bit[0] относится кR0, аBit[15] относится к региструR15(PC). Если в этом поле ни один бит не указан, то результат выполнения команды не определен (UNPREDICTABLE).

LDMIATHUMB