2009-11-17 6 views
1

У меня есть два вопроса о режиме адресации DA. Например:Каков первый адрес режима адресации ARM DA (Decrement After)?

STMDA R0!, {R1-R7} 

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

Итак:

  1. Будет ли значение R1 будет храниться в R0-24 или R0?
  2. Если R1 хранится до R0-24, то последующие магазины будут расти в верхней части памяти (от R0-24 до R0)?

ответ

0

часть псевдокоде показана ниже:

адрес = начальный_адрес при г = 0 до 15 , если register_list [я] == 1, то памяти [адрес, 4] = Ri адрес = Адрес + 4

кажется, что метод роста STM не имеет ничего общего с режимом адресации при хранении данных? он всегда хранит данные с более низкого адреса на более высокий, только режим адресации определяет начальный адрес на основе R0?

4

При использовании нескольких магазинов и нагрузок ARM значения регистра всегда загружаются/сохраняются в порядке возрастания в памяти. Таким образом, при использовании нисходящего множественного хранилища регистры записываются в память назад. Ваша STMDA инструкция эффективно распадается на следующие этапы:

  • магазин R7 на R0
  • магазин R6 на R0 - 4
  • магазин R5 на R0 - 8
  • магазин R4 в R0 - 12
  • магазин R3 на R0 - 16
  • магазин R2 на R0 - 20
  • магазине R1 на R0 - 24
  • вычесть 28 из R0 (из-за обратной записи - The !).

Таким образом, чтобы ответить на ваши вопросы:

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

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

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

+0

+1 абсолютно правильный. Это поведение описано в справочных руководствах по архитектуре ARM. –

+0

спасибо, ну, я думаю, что руководство определяет R0-24, поскольку start_address несколько неоднозначно, Этот start_address - это минимальный адрес памяти вместо первого сохраненного адреса. – wenlujon

+0

Псевдокод, описывающий операцию команды, совершенно ясен и соответствует описанию Pourquoi. –

0

Поиск плеча рычага тонарма Architectural Справочное руководство ...

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