跳到主要内容

条件码与条件分支

条件码寄存器保存什么?​

  • 内容: 最近一次算术运算或逻辑操作的状态信息;
  • 用途: 供条件分支指令判断是否跳转;

跳转指令怎样改变控制流?​

  • 机制: 把程序计数器设置为目标地址, 跳到程序的另一部分;
  • 组合: 条件码加跳转指令即可实现条件分支;

用条件控制怎样实现条件分支?​

  • 思路: 测试条件, 成立跳到 then 段, 不成立跳到 else 段;
t = test-expr;
if (!t) goto else;
then-statement;
goto done;
else:
else-statement;
done:

用条件传送怎样实现条件分支?​

  • 思路: 两种结果都算出来, 再用条件传送指令选出应该保留的一个;
v = then-expr;
ve = else-expr;
t = test-expr;
if (!t) v = ve;
  • 优势: 执行路径不依赖数据, 无需跳转指令, CPU 不做预测也能保持流水线充满;

分支预测为什么会带来性能损失?​

  • 机制: CPU 遇到条件跳转时先猜测分支方向并继续取指执行;
  • 收益: 猜测正确时流水线保持充满, 无需等待;
  • 代价: 猜测错误要丢弃已经完成的工作, 重新执行正确分支, 惩罚很高;
  • 结论: 条件传送不依赖数据, 通常比用条件控制实现分支更快;