当前位置:  技术问答>linux和unix

哪位大人能否帮小弟看看?

    来源: 互联网  发布时间:2015-04-25

    本文导语:  小弟对这个不是很理解,特别是testb 和 sbbl  orb 还有__res如何得到值的? static inline int strncmp(const char * cs,const char * ct,size_t count) { register int __res; int d0, d1, d2; __asm__ __volatile__( "1:tdecl %3nt" "js 2fnt" "lodsbnt" "scasbnt"...


小弟对这个不是很理解,特别是testb 和 sbbl  orb
还有__res如何得到值的?
static inline int strncmp(const char * cs,const char * ct,size_t count)
{
register int __res;
int d0, d1, d2;
__asm__ __volatile__(
"1:tdecl %3nt"
"js 2fnt"
"lodsbnt"
"scasbnt"
"jne 3fnt"
"testb %%al,%%alnt"
"jne 1bn"
"2:txorl %%eax,%%eaxnt"
"jmp 4fn"
"3:tsbbl %%eax,%%eaxnt"
"orb $1,%%aln"
"4:"
     :"=a" (__res), "=&S" (d0), "=&D" (d1), "=&c" (d2)
     :"1" (cs),"2" (ct),"3" (count));
return __res;
}

|
你这是什么版本的strncmp函数?Glibc里的?不像!内核里的好像不是这样的吧?
以下是2.4.18版内核的strncmp函数,参照着C版本看一看吧
/**
 * strncmp - Compare two length-limited strings
 * @cs: One string
 * @ct: Another string
 * @count: The maximum number of bytes to compare
 */
int strncmp(const char * cs,const char * ct,size_t count)
{
   register signed char __res = 0;

   while (count) {
      if ((__res = *cs - *ct++) != 0 || !*cs++)
         break;
      count--;
   }

   return __res;
}

|
大致是这样:
"1:tdecl %3nt"            长度减1 
"js 2fnt"                  为负则转到2:
"lodsbnt"                  取1字节
"scasbnt"                  比较
"jne 3fnt"                 不同转到3:
"testb %%al,%%alnt"        测试串是否结束
"jne 1bn"                   未结束转1:
"2:txorl %%eax,%%eaxnt"   置返回值
"jmp 4fn"                   转到4:
"3:tsbbl %%eax,%%eaxnt"   eax=eax-1
"orb $1,%%aln"              
"4:"

    
 
 

您可能感兴趣的文章:

 
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • 那位大人有 cursor/ncursor 库编程的资料,100分送上!!
  • LINUX大人进来就我!!!!!
  • 版主大人,各位大俠,請幫幫忙(關於GL4Java 的安裝方法)
  • 紧急求助!各位大人,nvidia5200显卡挂不上,xwindows启不来,安装kernel-source后提示少了nvidia.o库
  • 各位大人,怎样显示前一两天的日期!
  • 新用linux的GDB, 版本是出现6.3.3.0,出现奇怪问题, 可能是环境设置的问题, 大人帮忙
  • 求助 请教各位大人 SHELL编程
  • Web服务器/前端 iis7站长之家
  • 请大人帮忙看一下Oops的打印信息
  • [重新开楼]续求大人救命......[程序有些长,请您耐心帮忙看看]
  • linux新手,请教各位大人串口通讯问题(发送十六进制正常,接受数据错误)附源码
  • 提问的智慧(转,也许看看是有用的)请斑竹大人不要删


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3