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