当前位置: 代码迷 >> 汇编语言 >> 【挑战极限】从BYTE数组到无符号整数间的转换效率,该怎么处理
  详细解决方案

【挑战极限】从BYTE数组到无符号整数间的转换效率,该怎么处理

热度:2291   发布时间:2013-02-26 00:00:00.0
【挑战极限】从BYTE数组到无符号整数间的转换效率
unsigned char buf[] = {1,2,3,4};
int res;
//方式1
__asm
{
movzx eax,byte ptr [buf] 
movzx ebx,byte ptr [buf+1] 
movzx ecx,byte ptr [buf+2] 
movzx edx,byte ptr [buf+3] 
shl eax,18h 
shl ebx,10h 
shl ecx,8 
or eax,ebx 
or eax,ecx 
or eax,edx 
mov dword ptr [res],eax 
}
//res得到0x01020304

//方式2
__asm
{
mov eax, DWORD PTR [buf]
rol ax, 8
rol eax, 16
rol ax, 8
mov res, eax
}
//res得到0x01020304


//方式3
__asm
{
mov eax, DWORD PTR [buf]
xchg al, ah
rol eax, 16
xchg al, ah
mov res, eax
}
//res得到0x01020304


方式1、方式2效率基本相当,方式3最慢,大概慢25%。

问题:何以导致第三那种方式最慢?最好的办法是哪种?有没有其他更好的办法?



------解决方案--------------------------------------------------------
以前看的P5优化的书上说寄存器最好交错使用
------解决方案--------------------------------------------------------
mov eax, dword ptr[buf]
bswap eax
mov res, eax
  相关解决方案