理解标准C++内联汇编

理解标准C++内联汇编,c++,visual-c++,assembly,C++,Visual C++,Assembly,我正在尝试将此内联程序集移植到mcvc: asm("cmpl %3, %2\n\tcmovg %4, %0\n\tcmovle %5, %1" : "+r" (begin), "+r" (end) : "r" (x), "g" (key), "g" (middle + 1), "g" (middle)); 下面的伪代码是否正确实现了上面的程序集 if key > x: begin = middle + 1 else: end = middle AT&T有

我正在尝试将此内联程序集移植到mcvc:

asm("cmpl %3, %2\n\tcmovg %4, %0\n\tcmovle %5, %1"
    : "+r" (begin), "+r" (end)
    : "r" (x), "g" (key), "g" (middle + 1), "g" (middle));
下面的伪代码是否正确实现了上面的程序集

if key > x:
    begin = middle + 1
else:
    end = middle

AT&T有操作数颠倒,所以您得到了错误的条件,它应该是X> KEII假定您是标准GNU内联程序集,因为标准C++内联程序集不存在。此外,伪代码仅在需要时计算middle+1,而内联asm告诉编译器“middle+1”应无条件计算。@如果运算符+没有副作用,它会影响结果吗?如果条件不满足,它的结果将不起作用?我不是有意暗示这会影响结果。我的主要意思是,与让优化器决定相比,这看起来不像是内联汇编有用的情况。