dword wordval;
int get_svalue(BYTE k)
// k>0 always
// Takes k bits out of the BIT stream (wordval), and makes them a signed value
{
_asm {
xor ecx, ecx
mov cl,k
mov eax,[wordval]
shl eax,cl
shr eax, 16
dec cl
bt eax,ecx
jc end_macro
signed_value:inc cl
mov ebx,[start_neg_pow2]
add ax,word ptr [ebx+ecx*2]
end_macro:
}
}帮我看下这段代码什么意思。谢谢(最好帮我翻译成c写的代码)
解决方案 »
- 双缓冲问题
- 如何编程实现屏蔽网页中的悬浮窗体(广告)??
- 基于对话框的程序,弹出一个无模式对话框,可是无模式对话框总是处于上面。
- 怎么用DirectShow对捕捉到的视频进行编辑?
- richeditctrl控件中移动光标
- Win32 API 有没有死?
- typedef std::map<CString,PITblSettings> CTableSetingMap;
- 新手入门,高手帮忙呀,一个小问题
- 菜鸟问题(100分)在字符串中查字符的函数。
- 如何使用VC++加密一个字符串?
- 请教如何录制与回放鼠标事件(本人刚刚接触vc两周的学生)
- OnPrepareDC()中设置映射模式,当窗口滚动时图形模糊,如何解决啊?
int get_svalue(BYTE k)
{
int nRet = wordval;
nRet <<= k;
nRet >>= 16;
k--;
char* p = &start_neg_pow2;
if (k % nRet != 0)
nRet += *(p+k*2);
return nRet;
}完全忘了汇编了,好长时间不碰了,哈哈哈,上面写的别信。
这句转换有误, 应该是
if(nRet & (1<<k))
char* p = &start_neg_pow2; 中&start_neg_pow2 那里来的哟
mov ebx,[start_neg_pow2]
应该是翻译的有点问题。昨天自己翻译了几段都是比较简单的。还好自己能搞定。现在的就有点麻烦。自己也很少弄着。呵呵。
->
两个可能
ebx = start_neg_pow2;
或者 ebx = *(DWORD *)start_neg_pow2;
{
unsigned long ret = wordval, idx = k; ret = ret << idx;
ret = ret >> 16;
idx--; if (!(ret & (1<<idx)))
{
idx++;
ret += *((WORD*)(start_neg_pow2+(idx<<1)));
}
return ret;
}jpg解码里的代码吧,呵呵
我也遇到了这个问题,想把这个解码器用到pocket pc上
结果被这些汇编代码拦住了,已经搞定了
DWORD eax_bitx;
DWORD *p;
DWORD eax=wordval;
SWORD return_num;
//eax=eax|0xffff0000;
eax=eax<<x;
eax=eax>>16;
x=x-1;
eax_bitx=eax>>x;
eax_bitx=eax_bitx&0x0000000f;
if(eax_bitx==0)
{
x++;
p=(WORD*)start_neg_pow2;
x=x*2;
p=(char*)p+x;
//p=(WORD*)start_neg_pow2+x;
eax=eax&0x0000ffff;
eax=eax+*p;
eax=eax<<16;
eax=eax>>16;
}
return eax;这个代码 我已经测试通过