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