为什么在汇编的if语句中逻辑“ NOT”条件?

时间:2018-09-17 13:08:48

标签: c assembly compilation goto instruction-set

我正在学习程序集,一本教科书显示了条件控制的示例:

enter image description here

我不明白为什么在第3行中使用x>=y,为什么不仅仅遵循逻辑并使用{​​{1}}(与原始C代码相同)? (不是)if语句中的条件有什么特殊原因吗?

1 个答案:

答案 0 :(得分:1)

if()语句的意思是“如果条件不成立,请跳过此”。

如果条件为true,则希望执行落入if主体中;如果条件为false,则希望执行跳过if主体。

因此,编译if的明显/文字方式是在相反条件下使用jcc,例如jnl。 (对于那些高度相关的if / else块,例如减法和条件求反,优化的代码当然可以做得更好。)

如果要使用jl,则必须将if-body放在行外,也许在函数末尾的ret之后,然后跳转从它回来。