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

标签 c assembly compilation goto instruction-set

我正在学习汇编,教科书显示了条件控制的示例:

enter image description here

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

最佳答案

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

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

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

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

关于c - 为什么汇编中 if 语句中的条件是逻辑“NOT”?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52368539/

相关文章:

c++ - 为什么 __fastcall assebmler 代码大于 MS C++ 中的 __stdcall 代码?

linux - 我可以在MacOS的_start处通过代码执行 `ret`指令吗? Linux的?

visual-studio - assembly :以不同颜色打印一条线

emacs - 如何同时运行 emacs 和终端?

复杂的指针声明

检查C中的输入流是否为空

c++ - 每次编译cuda源码时md5sum的值都会变化

c++ - 在没有 IDE 的情况下编译单个文件,c++

c - 链表程序输出错误

C: Scanf 字符串,字段跳过器 "%*"应用于 while 循环中的转换说明符