内嵌汇编函数分析
来源:互联网 发布:微邦软件下载 编辑:程序博客网 时间:2024/06/10 17:54
1 Linux 0.12内核中strncmp函数的实现
extern inline int strncmp(const char * cs,const char * ct,int count){register int __res __asm__("ax");__asm__("cld\n" // 将标志寄存器Flag的方向标志位DF清零。在字串操作中使变址寄存器SI或DI的地址指针自动增加,字串处理由前往后 "1:\tdecl %3\n\t" // 将count的值减1,此处为标号1 "js 2f\n\t" // 如果count-1的值小于0则跳转到标号2(f代表向前,b代表向后) "lodsb\n\t" // 取串2的字符ds:[esi] -> al, 并且esi++ "scasb\n\t" // 比较al与串1的字符es:[edi],并且edi++ "jne 3f\n\t" // 如果不相等就跳转到标号3 "testb %%al,%%al\n\t" // test执行的就是and的指令,只不过不会保存and执行的结果,而是根据and的结果设置flags寄存器的各种标志// 这里可以用来判断是不是空字符 "jne 1b\n" // 如果ZF标志位不为0跳转到标号1(即不为空指针) "2:\txorl %%eax,%%eax\n\t" // 是空字符则清空eax "jmp 4f\n" // 跳转到标号4 "3:\tmovl $1,%%eax\n\t" // 不想等则将eax置1 "jl 4f\n\t" // 如果串2的字符小于串1,则跳转到标号4,即应该返回结果1 "negl %%eax\n" // 将eax的值取反 "4:" :"=a" (__res):"D" (cs),"S" (ct),"c" (count):"si","di","cx");return __res;}
可以看出该程序并未考虑空指针的情形。
阅读全文
0 0
- 内嵌汇编函数分析
- C内嵌汇编 实现write函数
- gcc内嵌汇编调用C函数
- 宏定义 内嵌汇编函数 及使用方法
- delphi内嵌汇编函数参数默认保存位置
- VB内嵌汇编
- gcc内嵌汇编
- 内嵌汇编
- 内嵌汇编
- GCC内嵌汇编
- VB内嵌汇编
- VC内嵌汇编
- 内嵌汇编简介
- GCC内嵌汇编
- Linux内嵌汇编
- 关于内嵌汇编
- GCC内嵌汇编
- c内嵌汇编
- 机器学习、深度学习、强化学习参数调节方法与总结
- token的使用及原理
- leetcode 28. Implement strStr()
- java mail exchange 邮箱发送邮件
- 哈希表
- 内嵌汇编函数分析
- Velocity UI for Eclipse
- myecplise 添加多个tomcat,并修改端口号
- 【ESP8266】使用ESP8266 NONOS SDK的JSON API
- eclipse没有编译jsp文件
- 有理数加法
- iOS编程中的快递小哥-Responder Chain(响应链)
- 清除浮动的方法
- 经验风险最小化(Empirical Risk Minization,ERM)