0

请帮我将以下代码转换为等效的 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
  }
}
4

1 回答 1

1

可能你不熟悉sbbandadc指令,即借位减法进位加法
sbb edx,edx是设置edx为 -1 的常见构造,如果设置了进位 - 一条指令否定进位标志并将其移动到寄存器中(开发人员手册不会告诉你)。
移位指令再次移入进位 - 仅当实际存在移位时。

所以这个功能基本上是在做:

if ( extend_mask[c] > i ) 
    return i + (c != 0);
else
    return i;
于 2012-05-21T09:18:31.617 回答