Какой первый адрес в режиме адресации ARM DA (Decrement After)?

StackOverflow https://stackoverflow.com/questions/1748319

Вопрос

У меня есть два вопроса о режиме адресации DA.Например:

STMDA R0!, {R1-R7}

Начальный адрес будет R0 - (7 * 4) + 4, то есть, R0-24, согласно Справочное руководство по архитектуре ARM и конечный_адрес будет R0.

Так:

  1. Будет ли значение R1 будет храниться в R0-24 или R0?
  2. Если 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 (из-за обратная запись - !).

Итак, отвечая на ваши вопросы:

  1. Значение R1 будет храниться в R0 - 24.(Здесь я имею в виду стоимость R0 до выполнения инструкции, а не после.Вы используете обратную запись – ! - так после инструкции, R0 из него будет вычтено 28.)

  2. R1 хранится в R0 - 24, но, как объяснялось выше, R1 это последний регистр, значение которого хранится в памяти. R7 сохраняется первым, а последующие хранилища оттуда растут в памяти вниз.

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

Поиск кронштейна Справочное руководство по архитектуре ARM...

Первый сформированный адрес — это значение базового регистра минус четыре раза количество регистров, указанное в плюс 4.Последующие адреса формируются путем увеличения предыдущего адреса на четыре.Для каждого регистра, указанного в , создается один адрес.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top