标签: c assembly compilation goto instruction-set
我正在学习程序集,一本教科书显示了条件控制的示例:
我不明白为什么在第3行中使用x>=y,为什么不仅仅遵循逻辑并使用{{1}}(与原始C代码相同)? (不是)if语句中的条件有什么特殊原因吗?
x>=y
答案 0 :(得分:1)
if()语句的意思是“如果条件不成立,请跳过此”。
if()
如果条件为true,则希望执行落入if主体中;如果条件为false,则希望执行跳过if主体。
if
因此,编译if的明显/文字方式是在相反条件下使用jcc,例如jnl。 (对于那些高度相关的if / else块,例如减法和条件求反,优化的代码当然可以做得更好。)
jnl
如果要使用jl,则必须将if-body放在行外,也许在函数末尾的ret之后,然后跳转从它回来。
jl
ret