暂时忽略条件,考虑这些代码块可能在汇编语言指令流中打印的顺序:
// A
if (x == y) {
// B
}
// C
Run Code Online (Sandbox Code Playgroud)
如果x == y为true,则流程从A到B顺序进行到C.在equality(beq)上不需要跳转,因为所需的流程与在指令流中打印块的方式相匹配.
当x == y为假时,在A结束时,流必须绕过B并直接跳到C.这就是为什么在不等式(bne)上触发分支指令是有意义的.
当然,仅将这些视为此特定情况的一个示例思维过程.
在一般情况下,这些都是实现细节.编译器可以以其认为合适的任何方式打印指令,包括反转条件.(请记住,由于现代CPU管道,编译器通常是一个强大的优化目标,可以成功猜出最可能的执行路径,并确保它包含尽可能少的跳转.)