Я отлаживаю в Code Composer Studio от Texas Instruments и заметил, что в представлении дизассемблирования отображается инструкция push , когда процессор находится в режиме ARM .
Согласно Инструкции по сборке ARM и Thumb :
PUSH Переносит несколько регистров в стек в состоянии Thumb (для состояния ARM используется STM)
Q1: Почемувместо STM отображается инструкция push?
Я также заметил, что перед запуском программы значение указателя стека уже было установлено.
Q2: Значение указателя стека определяется кем?
Программа:
int main(void)
{ // program stops here
OS_ERR err = OS_ERR_NONE;
/*rest of code are omitted*/
}
Разборка:
main():
805dce18: E92D4008 push {r3, lr}
17 OS_ERR err = OS_ERR_NONE;
805dce1c: E3A0C000 mov r12, #0
805dce20: E58DC000 str r12, [sp]
Регистры:
Name Value Description
CPSR 0x6000019F current program status registers
T 0 If set ARM is in Thumb mode
SP 0x88000F30 stack pointer