strlen.c文件中的内联汇编代码如下:
#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