使用内联汇编程序[gcc, intel, c],如何检查操作后是否设置了进位标志?
最佳答案
sbb %eax,%eax
如果设置了进位标志,将在 eax 中存储 -1,如果清除则为 0。无需预先将 eax 清零;从自身中减去 eax 可以为您做到这一点。这种技术非常强大,因为您可以将结果用作位掩码来修改计算结果,而不是使用条件跳转。
您应该知道,只有通过在内联 asm block 内部执行的算术设置进位标志时,测试进位标志才有效。您无法测试在 C 代码中执行的计算的进位,因为编译器可以通过各种方式优化/重新排序会破坏进位标志的内容。
关于检查是否设置了进位标志,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3139772/