Pop {pc} в сборке

Это может быть глупый вопрос, но в моем коде сборки, во время отладки, у меня есть

pop{r2-r6,pc}

и я думаю, что это дает мне серьезное исключение по вине. Я понимаю, что делает поп, но я не уверен, что означает часть ПК. Я не могу найти это объяснение где-либо в Интернете, и это не переменная в моем коде нигде.

Я использую Keil на STM32 в C ++

0

Решение

pc или же r15 это счетчик команд, регистр, который дает адрес, из которого процессор получает инструкции. Изменение его на другой адрес приводит к тому, что выполнение программы переходит на этот адрес.

В этом случае адрес считывается из стека для возврата из вызова функции; адрес возврата был бы помещен в стек (из регистрация ссылок lr или же r14) в начале функции.

Если это приводит к сбою, возможно, это связано с повреждением адреса в стеке. Возможно, вы пишете за пределами локального массива или переполняете стек слишком глубоким уровнем вызова функции.

2

Другие решения

PC регистр — это программный счетчик, он содержит адрес следующей инструкции, которая должна быть выполнена в архитектуре ARM (STM32 использует архитектуру ARM).

По умолчанию в сборке ARM он просто перезаписывает регистр ПК при возврате функции. То, что вы видите с помощью выражения pop, — это просто прямой способ вернуться, посмотреть здесь.

Остальная часть вашего вопроса аккуратно объяснена в посте Майка.

0

По вопросам рекламы [email protected]