编译器为if(a!= b)生成哪条8080条件跳转指令?

时间:2017-01-10 10:17:29

标签: assembly intel-8080

选项:

  1. JZ
  2. JNZ
  3. JC
  4. JNC
  5. 我有这个问题的答案,但我正在努力弄清楚它究竟是在问什么。这是什么意思,什么是一个很好的方式来了解这个主题?感谢。

1 个答案:

答案 0 :(得分:2)

我主要使用x86指令集,但似乎8080 one足够接近,所以跳转指令是相同的。

在x86(或8080)中,如果你的C代码看起来像这样

if (a != b)
{
    code1
}
code2

编译器通常会生成这样的汇编代码:

    cmp a, b
    jz label2

    code1

label2:

    code2

在伪代码中

  1. 比较ab
  2. 如果相等,请转到4(跳过code1
  3. code1
  4. code2
  5. 优化编译器可以更改您的代码布局(有时会从根本上改变,因此您既不会看到cmp也不会看到jz),但您无法预测,所以您可以做的最好就是假设没有优化和重新安排。