Find centralized, trusted content and collaborate around the technologies you use most.
Teams
Q&A for work
Connect and share knowledge within a single location that is structured and easy to search.
请帮我将以下代码转换为等效的 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 } }
可能你不熟悉sbbandadc指令,即借位减法和进位加法。sbb edx,edx是设置edx为 -1 的常见构造,如果设置了进位 - 一条指令否定进位标志并将其移动到寄存器中(开发人员手册不会告诉你)。移位指令再次移入进位 - 仅当实际存在移位时。所以这个功能基本上是在做:
sbb
adc
sbb edx,edx
edx
if ( extend_mask[c] > i ) return i + (c != 0); else return i;