Формат 9: Косвенная загрузка/хранение с непосредственным смещением
Рис. 47. Формат 9
Действия
Эти команды выполняют косвенную пересылку байта или целого слова между регистрами и памятью. Синтаксис в ассемблере для этих команд приведен в таблице 20.
Табл. 20. Команды формата 9
L |
B |
THUMB ассемблер |
ARM эквивалент |
Действия |
0 |
0 |
STR Rd, [Rb, #Imm] |
STR Rd, [Rb, #Imm] |
Записать целое слово из регистра Rd в память по адресу, полученному сложением содержимого регистра Rb и константы Imm. |
0 |
1 |
LDR Rd, [Rb, #Imm] |
LDR Rd, [Rb, #Imm] |
Прочитать целое слово из памяти по адресу, полученному сложением содержимого регистра Rb и константы Imm, и поместить его в регистр Rd. |
1 |
0 |
STRB Rd, [Rb, #Imm] |
STRB Rd, [Rb, #Imm] |
Записать младший байт Rd в память по адресу, полученному сложением содержимого регистра Rb и константы Imm. |
1 |
1 |
LDRB Rd, [Rb, #Imm] |
LDRB Rd, [Rb, #Imm] |
Прочитать байт из памяти по адресу, полученному сложением содержимого регистра Rb и константы Imm, и поместить его в младший байт регистра Rd. |
Примечание: Для команд со словарным доступом (B = 0) константа #Imm - это полный 7-битный адрес, у которого биты [1:0] должны быть равны нулю (выравнивание по границе целого слова). При этом ассемблер при формировании команды фактически выполнить деление на 4 (#Imm >> 2), чтобы получить верное значение поля 5-битного смещения.
Число машинных тактов при выполнения команд
Все команды этого формата эквивалентны командам в режиме ARM согласно таблице 20. Число машинных тактов выполнения этой команды в режиме THUMB идентично с числом тактов выполнения ее в режиме ARM. Примечание: для более подробной информации см. соответствующую главу.
Примеры
LDR R2, [R5,#116] ; Загрузить в R2 слово, расположенное по адресу,
; полученному после сложения содержимого R5 и числа 116.
; Примечание: в код команды будет помещено число 29.
STRB R1, [R0,#13] ; Записать младший байт R1 в память по адресу R0+13.
; Примечание: в код команды будет помещено число 13.
|
|