【发布时间】:2014-01-06 15:33:46
【问题描述】:
我们正在比较两个值
1 和 pi
然后我使用“如果高于则跳转”或如果更大则跳转:
我们有:
1 - pi < 0
所以我们不会跳。
它只发生在条件:
x - value > 0 是真的,对吧?
jg中的溢出标志是如何工作的?
fcomp ; st0:1 , st1:pi
fstsw ax
sahf
ja nie_odejmuj ;
我们跳吗?
使用 FPU
【问题讨论】:
-
请指定架构、平台和准确的比较方法。例如。对于 x86:设置 C0-C3 和手动复制标志的老式 FCOM?较新的 FCOMI 系列在标志中直接设置位?上证比较?别的东西?
-
@Netch:
fcomi和现代comiss/sd都设置 FLAGS 与旧版 x87fstsw ax/sahf相同。这不是巧合,显然它们就是这样设计的。 (可能是为了便于移植/采用,因为 CF 比OF!=SF更有用)。 Why do x86 FP compares set CF like unsigned integers, instead of using signed conditions?