Что ж, процессоры ARM не поддерживают стек напрямую, но у них есть инструкции, разработанные с учетом этого: LDM и STM. Так что, если вы используете STMDB в начале функции и LDMIA в конце, у вас фактически есть стек с полным + нисходящим стеком: ассемблеры, которые я помню, позволили вам написать «STMFD» и «LDMFD» в качестве псевдонимов. («Полный» стек - это тот, где указатель стека указывает на последнее слово в стеке, а не на следующее используемое место)
Так что это не то, что вы можете просто перенастроить во время выполнения: хотя, если вы писали свою собственную операционную систему с собственным соглашением о вызовах, вы могли бы использовать восходящий стек. Точно так же вы можете также не использовать R13 в качестве указателя стека - это тоже только часть соглашения о вызовах. Этот выбор эффективно внедряется в реализацию каждой функции, которая использует стек.