【挑战极限】从BYTE数组到无符号整数间的转换效率
时间:2011-11-08
来源:互联网
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%。
问题:何以导致第三那种方式最慢?最好的办法是哪种?有没有其他更好的办法?
作者: leechiyang 发布时间: 2011-11-08
movzx eax,byte ptr [buf]
movzx ebx,byte ptr [buf+1]
shl eax,18h
shl ebx,10h
movzx ecx,byte ptr [buf+2]
or eax,ebx
shl ecx,8
or eax,ecx
movzx edx,byte ptr [buf+3]
or eax,edx
mov dword ptr [res],eax
作者: Areslee 发布时间: 2011-11-08
movzx eax,byte ptr [buf]
movzx ebx,byte ptr [buf+1]
shl eax,18h
shl ebx,10h
movzx ecx,byte ptr [buf+2]
or eax,ebx
shl ecx,8
movzx edx,byte ptr [buf+3]
or eax,ecx
or eax,edx
mov dword ptr [res],eax
作者: Areslee 发布时间: 2011-11-08
把同样的指令分隔开执行是不是考虑到充分利用CPU的多条流水线?
作者: leechiyang 发布时间: 2011-11-08
作者: Areslee 发布时间: 2011-11-08
Assembly code
mov eax,dword ptr [buf] mov edx,eax shr eax,16 rol dx ,8 rol ax ,8 shl edx,16 or eax,edx mov res,eax
xchg 影响效率,一致性方面用的多一点。
作者: G_Spider 发布时间: 2011-11-08
作者: masmaster 发布时间: 2011-11-08
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28