以一个五级流水线的mips处理器为例。一条指令的执行经过IF,ID,EX,MEM以及WB五个环节。假设跳转指令在第三个周期计算出条件判断结果以及跳转目标地址,那么在跳转指令的之后两条指令都是不确定是否可以执行的。
最简单的处理方法是在之后插入两条nop指令,等到跳转地址计算出来之后再取新的指令。如图
但是这样每次跳转都需要插入两条nop,相当于这两个时钟周期是白白浪费的。为了提高效率,编译器会找到无论跳转与否都会执行的两条指令放在这里,这就是分支延迟槽。
随着现代处理器流水线不断加深,从取指到计算出跳转地址所需的时钟周期也变多了,意味着编译器需要找到更多指令来填满分支延迟槽。有时很难找到这么多指令,因此分支延迟槽也慢慢不被采用了。