SP это немного необычный РОН (R13). Для разных архитектур ARM имеются разные теневые регистры SP. Для ARM7/9/11/Cortex-R/Cortex-A имеются отдельные стеки каждого прерывания.
Часто нужно сохранить любой ненужный регистр для гарантирования выравнивания стека по 8 байтам (в соответствие с ARM ABI), возможно, сохранение SP для этого и сделано.
LR это обычный РОН, R14, который может использоваться в общем
случае как угодно
команда "B" не использует R14.
"BL" использует. То есть любой вызов функции из ISR перепишет R14, который содержит адрес возврата из прерывания. Поэтому R14 надо сохранять в начале прерывания и восстанавливать в конце.