将程序集转换为等效的c代码

时间:2012-05-17 05:21:32

标签: c assembly

请帮我将以下代码转换为等效的C代码。提前致谢。该模块返回一个uint值。代码如下。

inline uint jpeg_decoder::huff_extend(uint i, int c)
{
  _asm
  {
    mov ecx, c
    mov eax, i
    cmp eax, [ecx*4+extend_mask]
    sbb edx, edx
    shl edx, cl
    adc eax, edx
  }
}

1 个答案:

答案 0 :(得分:1)

您可能不熟悉sbbadc指令,借用减去使用随附添加。
sbb edx,edx是一个常见的构造,用于将edx设置为-1(如果进位已设置) - 一个取消进位标志并将其移入寄存器的指令(开发人员手册不会告诉您的内容) )。移位指令再次移入进位位 - 只有实际存在移位。

所以功能基本上是这样做的:

if ( extend_mask[c] > i ) 
    return i + (c != 0);
else
    return i;