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

Переход и переключение режима ядра

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

BX {cond} <Rn>

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

Oписание

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

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

Эта команда будет выполнена, если условие истинно. Машинный код команды:

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

Код

Действие

BX{cond} Rn

1100

Выполнить переход (со сменой состояния ядра) по адресу Rn

Команда выполняет переход, копируя содержимое регистра общего назначения Rn в программный счетчик PC. Во время перехода происходит очистка конвейера команд и передача управления по адресу, определенному регистром Rn. Бит 0 регистра Rn определяет режим работы ядра после выполнения перехода: ARM (Rn[0] = 0) или THUMB(Rn[0] = 1).

Примечание: Если R15 используется в качестве операнда, поведение команды неопределенно.

Результат выполнения команды BX PC в THUMB режиме с невыровненным по границе слова адресом непредсказуем, поэтому не следует применять ее в таком виде.

Примеры

ADR R0, Into_THUMB + 1 ; Сформировать адрес перехода

; и установить в "1" бит 0, т.е. указать

; на необходимость переключения в режим                                                         THUMB

BX R0 ; Перейти и сразу переключить ядро в режим                                                          THUMB

CODE16 ; Последующие команды должны

     Into_THUMB ; декодироваться в режиме THUMB

ADR R5, Back_to_ARM ; Сформировать адрес перехода

; и очистить бит 0, т.е. указать

; на необходимость возврата в режим ARM

BX R5 ; Перейти и сразу переключить ядро в режим ARM

ALIGN ; Выравнивание по слову

CODE32 ; Последующие команды должны

    Back_to_ARM ; декодироваться в режиме ARM

CDP, CDP2 – ARM

Сообщение сопроцессору (Coprocessor Data Processing)

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

CDP {<cond>} <coproc>, <opcode_1>, <CRd>, <CRn>, <CRm>, <opcode_2>

CDP2 <coproc>, <opcode_1>, <CRd>, <CRn>, <CRm>, <opcode_2>

Формат команды обработки данных сопроцессором

Описание

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

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

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

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

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

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

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

Команда CDP (Coprocessor Data Processing) сообщает сопроцессору, чей номер cp_num, выполнить операцию, которая независима от ARM регистров и памяти. Если не было обнаружено сопроцессоров, которые могли выполнить операцию, генерируется неопределенное командное исключение.

Эта команда будет выполнена, если условие истинно. Все различные условия ее выполнения перечислены в таб. 1 ниже.

Команда этого класса используется для того, чтобы указать сопроцессору на необходимость выполнения его некоторой внутренней команды. Ядро ARM7TDMI не ожидает окончания выполнения команды и не получает ее результатов. Сопроцессор может иметь в своем составе некую очередь команд, требующих выполнения, и при этом их выполнение может производиться одновременно с выполнением других команд ядра ARM7TDMI, т.е. фактически обеспечивается одновременная параллельная работа обоих процессоров.

CDP2 – Приводит к тому, что поле условия команды устанавливается в 0b1111. Это обеспечивает дополнительное место для кода команды, так что возможно выполнение большего числа команд сопроцессора. Итоговая инструкция выполняется безусловно.

Число машинных тактов

Команда CDP выполняется за 1S + bl, где b – число машинных тактов, необходимых для выполнения пустых тактов сопроцессора, S и I зависят от типа машинных тактов.

Версия архитектуры

CDP в версии 2 и выше.

CDP2 в версии 5 и выше.

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

Команда CDP используется для выполнения команд сопроцессора, которые непосредственно не выполняются над значениями в ARM-регистрах или в основной памяти. Например, это команда умножения чисел с плавающей запятой для сопроцессора с плавающей точкой.

Замечания

Поля сопроцессора

Биты команды [31:24], [11:8] и [4] являются архитектурно определенными.

Невыполненные инструкции сопроцессора

Поддержка сопроцессора является необязательной, несмотря на архитектуру. В реализации может быть ограниченный набор команд сопроцессора, или может не быть команд сопроцессора вовсе. Любая команда сопроцессора, которая не была реализована, приводит к неопределенной “ловушке” команды (undefined instruction trap).

Примеры

CDP p1,10,c1,c2,c3 ; Запрос на выполнение сопроцессором #1

; для выполнения команды с кодом 10

; CR2 и CR3 – операнды, CR1 – результат.

CLZ – ARM