作者:王聪 来源:A Geek\’s Page   酷勤网收集 2007-11-24

摘要
  无意间在Linux内核中发现这么一段汇编代码,更准确地说应该是gcc内联汇编,写得很精彩,拿出来和大家分享一下。

无意间在Linux内核中发现这么一段汇编代码,更准确地说应该是gcc内联汇编,写得很精彩,拿出来和大家分享一下。

代码是在include/asm-i386/string.h中,是针对i386对memcpy做进一步优化。我们知道,一个简单的memcpy其实和strcpy差不多,区别只是前者检查的是复制的个数,而后者检查的是当前字符是否是’\0′。

而这显然还有很大的优化余地,首先像这种非常常用的库函数是可以用汇编重写来提高速度的。当然了,可移植性是降低了,但我们可以针对每个平台写一套汇编。这样速度上的提升还是蛮乐观的。其次,memcpy显然没必要一个一个字节地复制,其实我们最多每次也就复制4个字节(当然是在i386上),但如果复制数量大的话,这种提升还是很明显的。于是下面的汇编就出来乐~! 

评论如下:

34~36

rep=>重复

movsl=>以long为单位拷贝,从from(%esi)到to(%edi),复制n/4次。别担心,这里是i386。

37~38

恩,用n/4去和n相与。

39

若n/4个4就是全部则完成,跳转到后面的标号,结束。

40

还有剩下的,好,把n%4剩下的一个一个字节地复制。

41~44

这里看不懂的就去学gcc的嵌入汇编语法吧!

来自:http://wangcong.org/blog/?p=235

分类: 汇编学习 嵌入式开发 黑客技术



关于酷勤 | 联系方式 | 免责声明 | 友情链接