Формат 5: Команды для работы с Hi регистрами и команда перехода со сменой состояния
Рис. 43. Формат 5
Действия
Существуют четыре комады этой группы. Первые трия из них выполняют сложени (ADD) сравнение (CMP) и копирование (MOV) между Hi и Lo или Hi и Hi регистрами. Четвертая команда - переход (BX) выполняет переход (Branch) одновеременно с возможностью переключения состояния процессора.
Синтаксис в асеемблере для команд этой группы приведен в табл. 16.
Примечание: из этой группы только команда CMP (Op = 01) влияет на флаги регистра CPSR. Реультаты выполнения команд ADD (Op = 00), CMP (Op = 01) и MOV (Op = 10) при H1 = 0, H2 = 0 неопределен, поэтому такие команды применять не следуют.
Табл. 16. Команды формата 5
OP |
H1 |
H2 |
THUMB ассемблер |
ARM эквивалент |
Действия |
00 |
0 |
1 |
ADD Rd, Hs |
ADD Rd, Rd, Hs |
Сложить содержимое регистра 8…15 с регистром 0…7. |
00 |
1 |
0 |
ADD Hd, Rs |
ADD Hd, Hd, Rs |
Сложить содержимое регистра 0…7 с регистром 8…15. |
00 |
1 |
1 |
ADD Hd, Hs |
ADD Hd, Hd, Hs |
Сложить содержимое регистра 8…15 с регистром 8…15. |
01 |
0 |
1 |
CMP Rd, Hs |
CMP Rd, Hs |
Сравнить регистр 0…7 с регистром 8..15, установив/сбросив флаги регистра CPSR в зависимости от результата. |
01 |
1 |
0 |
CMP Hd, Rs |
CMP Hd, Rs |
Сравнить регистр 8…15 с регистром 0..7, установив/сбросив флаги регистра CPSR в зависимости от результата. |
01 |
1 |
1 |
CMP Hd, Hs |
CMP Hd, Hs |
Сравнить регистр 8…15 с регистром 8..15, установив/сбросив флаги регистра CPSR в зависимости от результата. |
10 |
0 |
1 |
MOV Rd, Hs |
MOV Rd, Hs |
Скопировать содержимое регистра 8…15 в регистр 0…7 |
10 |
1 |
0 |
MOV Hd, Rs |
MOV Hd, Rs |
Скопировать содержимое регистра 0…7 в регистр 8…15. |
10 |
1 |
1 |
MOV Hd, Hs |
MOV Hd, Hs |
Скопировать содержимое регистра 8…15 в регистр 8…15. |
11 |
0 |
0 |
BX Rs |
BX Rs |
Выполнить переход (со сменой состояния ядра) по адресу, указанному в гегитре 0…7. |
11 |
0 |
1 |
BX Hs |
BX Hs |
Выполнить переход (со сменой состояния ядра) по адресу, указанному в гегитре 8…15. |
Число машинных тактов при выполнения команд
Все команды этого формата эквивалентны командам в режиме ARM согласно таблице 16. Число машинных тактов выполнения этих команд в режиме THUMB идентично с числом тактов выполнения ее в режиме ARM. Примечание: для более подробной информации см. соответствующую главу.
Команда BX
BX выполняет переход на подпрограмму, которая начинается с адреса, указанного в Lo и Hi регистрах. Нулевой бит этого адреса определяет состояние процессора перед вызовом подпрограммы: 0 - процессор переводится в состояние ARM, 1 - состояние THUMB.
Примечание: При H1 = 1 действия команды BX не определены, поэтому не следует применять ее в таком виде.
Использование регистра R15 в качестве операнда
Если R15 является операндом, то адресом перехода при выполнении команды BX будет адрес самой этой команды + 4 байта со очищенным нулевым битом.
Примечание: Результат выполнения команды BX PC в THUMB режиме с невыровненным по границе слова адресом непроедсказуем, поэтому не следует применять ее в таком виде.
Примеры
Команды с Hi регистрами
ADD PC, R5 ; PC := PC + R5 без влияния на флаги CPSR
CMP R4, R12 ; Изменить флаги CPSR в зависимости от результата (R4-R12)
MOV R15, R14 ; Скопировать регистр R14 (LR) в регистр R15 (PC)
; без влияния на флаги CPSR.
; Например, это - вызов подпрограммы
Переход и смена состояния ядра
; Переключить состояние ядра из режима THUMB в режим ARM
ADR R1,outofTHUMB
ADR R1,outofTHUMB ; Загрузить в регистр R1 адрес "outofTHUMB"
MOV R11,R1 ; Скопировать R1 в R11
BX R11 ; Скопировать R11 в PC.
; Бит 0 в регистре R11 определяет будущее состояние
; ядра перед переходом: ARM или THUMB.
; В данном случае переключение произойдет в режим ARM.
...
ALIGN
CODE32
outofTHUMB
; Теперь ядро находится в режиме ARM
|
ДОЛ Смена
|