Какой первый адрес в режиме адресации ARM DA (Decrement After)?
-
20-09-2019 - |
Вопрос
У меня есть два вопроса о режиме адресации DA.Например:
STMDA R0!, {R1-R7}
Начальный адрес будет R0 - (7 * 4) + 4
, то есть, R0-24
, согласно Справочное руководство по архитектуре ARM и конечный_адрес будет R0
.
Так:
- Будет ли значение
R1
будет храниться вR0-24
илиR0
? - Если
R1
хранится вR0-24
, то последующие хранилища будут расти к верху памяти (отR0-24
кR0
)?
Решение 3
часть псевдокода показана ниже:
address = start_address для i = 0–15, если register_list [i] == 1, затем память [адрес, 4] = ri адрес = адрес + 4
похоже, метод роста STM не имеет ничего общего с режимом адресации при хранении данных?Он всегда хранит данные с более низкого адреса до более высокого, режим адресации только решает начальный адрес на основе R0?
Другие советы
При использовании нескольких хранилищ и загрузок ARM значения регистров всегда загружаются/сохраняются в памяти в порядке возрастания.Таким образом, при использовании нисходящего множественного хранилища регистры записываются в память задом наперед.Твой STMDA
Инструкция фактически разбивается на следующие этапы:
- магазин
R7
вR0
- магазин
R6
вR0 - 4
- магазин
R5
вR0 - 8
- магазин
R4
вR0 - 12
- магазин
R3
вR0 - 16
- магазин
R2
вR0 - 20
- магазин
R1
вR0 - 24
- вычесть 28 из
R0
(из-за обратная запись -!
).
Итак, отвечая на ваши вопросы:
Значение
R1
будет храниться вR0 - 24
.(Здесь я имею в виду стоимостьR0
до выполнения инструкции, а не после.Вы используете обратную запись –!
- так после инструкции,R0
из него будет вычтено 28.)R1
хранится вR0 - 24
, но, как объяснялось выше,R1
это последний регистр, значение которого хранится в памяти.R7
сохраняется первым, а последующие хранилища оттуда растут в памяти вниз.
Я должен признать, что не знаю никакой документации, подтверждающей этот ответ.Кроме того, прошло много времени с тех пор, как я в последний раз занимался кодированием ARM.Тем не менее, я определенно помню, как задавался вопросом, как магазины ARM регистрируются в нисходящем множественном хранилище.Я понял это, написав короткую программу, чтобы выяснить это.
Поиск кронштейна Справочное руководство по архитектуре ARM...
Первый сформированный адрес — это значение базового регистра минус четыре раза количество регистров, указанное в плюс 4.Последующие адреса формируются путем увеличения предыдущего адреса на четыре.Для каждого регистра, указанного в , создается один адрес.