ARM并不是标准的RISC流水线,没有延迟槽的概念,可以去看一下ARM官方的ARCH文档,跳转之后的LR记录的是跳转的下一条指令。下面是arm v5的arch文档中关于B/BL的伪代码描述
Operation
if ConditionPassed(cond) then
if L == 1 then
LR = address of the instruction after the branch instruction
PC = PC + (SignExtend_30(signed_immed_24) << 2)