В соответствии с IC ARM.
В состоянии ARM значение ПК - это адрес текущей команды плюс 8 байтов.
В состоянии Thumb:
- Для инструкций B, BL, CBNZ и CBZ значение ПК - это адрес текущей команды плюс 4 байта.
- Для всех других инструкций, в которых используются метки, значение ПК является адресом текущей команды плюс 4 байта, бит [1] результата очищается до 0, чтобы сделать его выравниванием по словам.
Просто говоря, значение регистра ПК указывает на инструкцию после следующей инструкции. Это то, чего я не понимаю. Обычно (особенно в x86) регистр счетчика программ используется для указания адреса следующей команды, которая должна быть выполнена.
Итак, каковы предпосылки, лежащие в основе этого? Условное выполнение, возможно?