作者热门文章
- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我想知道为什么if(x == y)
在C语言中翻译成'bne' 条件而不是 MIPS 中的 'beq' 条件?
最佳答案
暂时忽略条件,考虑这些代码块可能在汇编语言指令流中打印的顺序:
// A
if (x == y) {
// B
}
// C
当 x == y
为真时,流程按顺序从 A 到 B 再到 C。相等时不需要跳转 (beq
),因为所需的流程与 block 在指令流中的打印方式相匹配。
当 x == y
为 false 时,在 A 的末尾,流程必须绕过 B 并直接跳转到 C。这就是分支指令被触发的原因不等式(bne
)。
当然,仅将这些作为此特定案例的思考过程的示例。
在一般情况下,这些都是实现细节。编译器可以以任何它认为合适的方式打印指令,包括反转条件。 (请记住,由于现代 CPU 流水线,编译器成功猜测最可能的执行路径并确保它包含尽可能少的跳转通常是一个强大的优化目标。)
关于c - C 中的 IF 条件转换为 MIPS,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34825648/
我是一名优秀的程序员,十分优秀!