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

Команда перезагрузки кэша (a cache preload instruction)

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

PLD [Rn {, cond}]

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

Описание

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

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

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

Адресации со сброшенным битом [24] (р бит) или установленным битом [23] (w бит) может привести к непредсказуемым результатам.

Мнемоника ассемблера

Код

Действие

PLD

0111

Загрузка кэш из адреса Rn

Команда презагрузки кэша

Примеры

PLD R2 ; //Предзагрузка кэша осуществляется из области, адрес которой записан в R2

POPTHUMB

Команда извлечения из стека (pop)

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

POP <registers>

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

Описание

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

POP – операция выгружает подмножество (а возможно и все) регистров общего назначения R0 - R7 и регистр PC из стека. Бит[i] установлен в единицу, если регистр Ri включен в список, и наоборот. Бит R устанавливается в единицу, если регистр PC включен в список и наоборот. Как минимум один регистр должен быть включен в список, иначе результат операции будет непредсказуемым.

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

Команда POP использует операции со стеком. Эта команда, включающая регистр PC в <registers>, может быть использована как эффективная команда выхода, т.к. она восстанавливает сохраненные регистры, загружает PC возвращенным адресом операции и обновляет указатель стека.

Операция не оказывает влияния на регистр CPSR.

Примеры

POP {R4}

Извлекаем регистр R4 из стека

POP {R4,R6,R7}

Извлекаем регистры R4, R6, R7 из стека

POP {R4,PC}

Извлекаем регистр R4 из стека и осуществляем возврат к выполняемой подпрограмме.

PUSHTHUMB

Размещение регистров в вершине стека

(PUSH Multiple Registers)

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

PUSH <registers>

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

Описание

<registers> – список регистров для размещения в стеке, разделённых запятыми и ограниченных “{“ и “}”. (см. таблицу 1).

Сохранение значений регистров в стек

Пример

PUSH {R0-R4,LR} ; Поместить в стек регистры R0,R1,R2,R3,R4

; и R14 (LR)

; обновив соответственно указатель на

; вершину стека R13

QADD(1) – ARM

Команда добавление сразу нескольких операндов

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

QADD {<cond>}<Rd>, <Rm>, <Rn>

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

Описание

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

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

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

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

Записывает сумму Rm и Rn в регистр Rd. Оба этих значения рассматриваются как целые знаковые числа.

Изменение состояния флагов: Если происходит переполнение, то устанавливается флаг Q. Для считывания состояния этого флага или его сброса можно воспользоваться MRS инструкциями.

Действие

Если условие (<cond>) выполнено, то (Rd) = (Rn) + (Rm).

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

Применительно только для ARM9E. КомандаQADDиспользуется, когда необходимо произвести сложение сразу нескольких операндов с занесением результата в 32 битный знаковый диапазон.

Примеры

QADD R0, R1, R9

(R0)=(R1)+(R9)

QADDEQR2,R4,R5

Если Z= 1, то (R2)=(R4)+(R5).

QADD(2) – ARM