Существуют определенные ограничения относительно использования PC
в списке регистров для команд PUSH
и POP
, в зависимости от режима работы, см .:
Справочник по набору инструкций ARM, PUSH
/ POP
В частности, в Thumb [2] - это нет push {pc}
операция (то же самое, что сказать, что операции stmfd sp!, {pc}
нет - push
сопоставлен с stmfd sp!
).
Так что, если вы компилируете свой код ядра (зачем вам нужен / 10 * * обработчик прерываний , если это не код ядра), проверьтесобираете ли вы ядро Thumb-2.
При этом вы говорите, что столкнулись с инструкцией stmfd sp!,{pc}
- вы уверены, что это не опечатка?stmfd sp!,{lr}
(и его брат ldmfd sp!, {pc}
- здесь PC
присутствует) является нормальным / полностью законным и часто требуется / встречается как в режиме ARM, так и в режиме Thumb-2.Но что на самом деле является целью сохранения программного счетчика в стек?Что можно сделать с этим, чего нельзя было бы достичь другими способами?