Glibc中strlen的汇编实现
2012-03-26 21:26
1061 查看
strlen.c文件中的内联汇编代码如下:
经过gcc编译之后形成的汇编代码如下:
#include <string.h> size_t strlen (const char *str) { int cnt; asm("cld\n" /* Search forward. */ /* Some old versions of gas need `repne' instead of `repnz'. */ "repnz\n" /* Look for a zero byte. */ "scasb" /* %0, %1, %3 */ : "=c" (cnt) : "D" (str), "0" (-1), "a" (0)); return -2 - cnt; }
经过gcc编译之后形成的汇编代码如下:
Disassembly of section .text: 00000000 <strlen>: 0: 57 push %edi 1: b9 ff ff ff ff mov $0xffffffff,%ecx 6: b8 00 00 00 00 mov $0x0,%eax b: 8b 7c 24 08 mov 0x8(%esp),%edi f: fc cld 10: f2 ae repnz scas %es:(%edi),%al 12: b8 fe ff ff ff mov $0xfffffffe,%eax 17: 29 c8 sub %ecx,%eax 19: 5f pop %edi 1a: c3 ret
相关文章推荐
- glibc-2.19 之 strlen 实现
- strlen的汇编实现
- 汇编实现memcpy,memset,strcat,strlen
- glibc strlen 实现
- glibc 中的 strlen 高效实现
- 汇编实现memcpy,memset,strcat,strlen
- release版strlen的反汇编内联实现
- C++11新特性中的匿名函数Lambda表达式的汇编实现分析
- 【C语言】my _strlen函数功能的实现
- strlen strncat strstr 三种库函数的代码实现
- strcpy, strcmp, strcat, strstr, strlen的实现
- 用汇编实现任意长度的两个整数相加
- 【C语言】strlen的三种实现方法,strcmp,strcat,strcpy
- 为什么objc_msgSend必须用汇编实现
- 汇编实现字符串比较
- 【C深度剖析】自实现 strcmp strlen strcpy strcat
- 在Lua中实现汇编中的跳转语句Goto
- C 标准库 strlen 函数的实现
- strlen()和swap() 两个函数的实现(特定条件下)。
- 不调用具有"协程特性"的系统API函数而使用汇编实现协程