请帮我将以下代码转换为等效的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
}
}
答案 0 :(得分:1)
您可能不熟悉sbb
和adc
指令,借用减去使用随附添加。
sbb edx,edx
是一个常见的构造,用于将edx
设置为-1(如果进位已设置) - 一个取消进位标志并将其移入寄存器的指令(开发人员手册不会告诉您的内容) )。移位指令再次移入进位位 - 只有实际存在移位。
所以功能基本上是这样做的:
if ( extend_mask[c] > i )
return i + (c != 0);
else
return i;