SVC обработчик: процессор ARM cortex m

Не было достаточно информации о svc в интернете . я узнал, как работает обработчик SVC,но дело в том,что я не понимаю,почему он укладывает регистр R0, R1, R2, R3 и R12 в стек. если у него нет цели ,он не будет хранить так какую информацию ,которая важна для процессора, присутствует в этих регистрах.

и любое одно pls предлагает как выучить Cortex M3 рукоятки?
Как начать обучение, чтобы не было никаких путаниц в основных вещах, таких как выше.
заранее спасибо

Метки

1 ответ

  1. Это происходит потому, что каждый раз, когда вы вызываете функцию, ABI описывает, что:

    • Регистрыr0r3могут содержать параметры и могут использоваться в качестве скретч-регистра. Это означает, что функции не нужно сохранять их (они будут изменены)
    • Другие регистры должны быть сохранены функцией, т. е. они должны быть восстановлены к предыдущему значению, когда функция возвращает.

    Это похоже на r12.

    Таким образом, если SVCвызывается обработчик функции C, регистры r0r3будут повреждены функцией C, в то время как другие регистры поддерживаются. В этом случае оборудование выполняет укладку автоматически, так что у нас есть гарантия (если функция C правильна), что все регистры имеют то же самое значение, чем до вызова SVC.

    Обратите внимание, что для SVC было бы приемлемо знать, что эти регистры повреждены (потому что мы знаем, когда мы вызываем инструкцию SVC). Но другие исключения (например, прерывания) имеют такое же поведение, и для них это важно, поскольку мы не знаем, когда они происходят.

    Что касается книги, я знаю эту книгу, поэтому я могу посоветовать ее:

    Окончательное руководство по ARM Cortex-M3, второе издание 2-е издание
    Джозеф ю