Какой первый адрес в режиме адресации ARM DA (Decrement After)? - PullRequest
1 голос
/ 17 ноября 2009

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

STMDA R0!, {R1-R7}

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

Итак:

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

Ответы [ 3 ]

4 голосов
/ 17 ноября 2009

При использовании нескольких хранилищ и загрузок 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 хранит регистры в нисходящем множественном хранилище. Я понял это, написав короткую программу, чтобы узнать.

0 голосов
/ 20 ноября 2009

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

address = start_address для я = от 0 до 15 если register_list [i] == 1, то Память [адрес, 4] = Ri адрес = адрес + 4

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

0 голосов
/ 20 ноября 2009

Поиск кронштейна АРМ. Справочник по архитектуре ...

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

...