例如,对于下面的 C 表达式,
int x =-1;
unsigned y = 1;
if(x>y)
x+=y;
在编译时,程序集版本可以如下所示,
(假设 x 在 %eax 中,y 在 %edx 中)
mov $-1 %eax
mov $1 %edx
mov %eax %edp
add %edx %edp
cmp %eax %edx
cmovg %edp %eax
由于 cmovg 是基于 ~(SF^OF)&~ZF 的评估执行的,所以当 CPU 执行指令 cmp %eax %edx 时,CF 是否也会被设置?请注意,二进制形式的负数 -1 与 2<<32-1 相同。