Формат 6: Косвенная загрузка с помощью регистра PC
Рис. 44. Формат 6
Действие
Эта команда выполняет сложение содержимого регистра PC с 10-битным смещением в виде константы, после чего целое слово, размещенное в памяти по этому адресу, помещается в регистр общего назначения Rd.
Примечания:
Константа #Imm, указанная в команде, является фактически 10-битным смещением адреса, но должна быть обязательно выровнена по границе целого слова (т.е. биты [1:0] должны быть равны 0), поскольку при формировании команды ассемблером последний выполнит операцию деления на 4 (#Imm >> 2) и поместит результат в соответствующее поле команды.
Вычисленное значение адреса должно быть как минимум на 4 байта больше, чем адрес самой команды, и при этом бит 1 регистра PC принудительно будет сброшен в 0, что необходимо для выравнивания по границе целого слова.
Табл. 17. Команды формата 6
THUMB ассемблер |
ARM эквивалент |
Действия |
LDR Rd, [PC, #Imm] |
LDR Rd, [R15, #Imm] |
Положительное смещение (255 слов, 1020 байт), заданное в Imm, сложить с содержимым регистра PC, а слово, хранящееся в памяти по вычисленному адресу, скопировать в регистр Rd. Содержимое PC не изменяется. |
Число машинных тактов при выполнения команды
Все команды этого формата эквивалентны командам в режиме ARM согласно таблице 17. Число машинных тактов выполнения этой команды в режиме THUMB идентично с числом тактов выполнения ее в режиме ARM. Примечание: для более подробной информации см. соответствующую главу.
Примеры
LDR R3,[PC,#844] ; Загрузить в R3 слово, расположенное по адресу,
; полученному после сложения содержимого PC и числа 844.
; Бит [1] регистра PC принудительно сбрасывается в ноль.
; Примечание: фактически в качестве ;константы Imm в код
; этой команды будет помещено значение 211.
|
|