【问题标题】:Which 8080 conditional jump instruction would the compiler generate for if (a !=b)?编译器会为 if (a !=b) 生成哪条 8080 条件跳转指令?
【发布时间】:2017-05-24 19:11:34
【问题描述】:

选项:

  1. jz
  2. jnz
  3. jc
  4. jnc

我有这个问题的答案,但我很难准确地理解它在问什么。这是什么意思,什么是复习这个话题的好方法?谢谢。

【问题讨论】:

  • 我想JNZ(如果没有设置 Z 标志就跳转)
  • 如果你有答案,那你为什么不问“为什么 8080 编译器会为 if(a != b) 生成这条指令”?
  • 抱歉听起来很生硬,但是“复习这个话题的好方法”是真正阅读它。如果你稍微看一下,有很多关于 8080 组装的参考资料和资源。
  • 另外,“编译器”会生成什么指令或指令集在很大程度上取决于实际的编译器。它还更多地取决于ab 是什么。如果我们不知道使用的是哪个编译器,或者ab是什么,那么我们无法回答。
  • 直截了当的答案显然是“JNZ”——实际的答案是“其中任何一个”

标签: assembly intel-8080


【解决方案1】:

我主要使用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

优化的编译器可以改变你的代码布局(有时会彻底改变,所以你既看不到cmp 也看不到jz),但你无法预测,所以你能做的最好的就是假设没有优化和重新排列。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-02-10
    • 1970-01-01
    • 2015-06-23
    • 2011-07-15
    • 2022-12-06
    • 2012-07-11
    • 2021-08-19
    相关资源
    最近更新 更多