参考:linux 内核0.11 /include/sys/string.h
1
. 将一个字符串(src)拷贝到另一个字符串(dest),直到遇到NULL 字符后停止。
char
*
strcpy (
char
*
dest,
const
char
*
src)

...
{
_asm

...{
pushf
mov esi,src
mov edi,dest
cld
l1: lodsb
stosb
test al,al
jne l1
popf
}
return dest;
}


2
.拷贝源字符串count 个字节到目的字符串。
char
*
strncpy (
char
*
dest,
const
char
*
src,
int
count)

...
{

_asm...{
pushf
mov esi,src
mov edi,dest
mov ecx,count
cld
l1: dec ecx
js l2
lodsb
stosb
test al,al
jne l1
rep stosb
l2: popf
}
return dest;
}

3
.将源字符串拷贝到目的字符串的末尾处。
char
*
strcat (
char
*
dest,
const
char
*
src)

...
{

_asm ...{
pushf
mov esi,src
mov edi,dest
xor al,al
mov ecx,0xffffffff
cld // 清方向位。
repne scasb
dec edi
l1: lodsb
stosb
test al,al
jne l1
popf
}
return dest;
}

4
.将源字符串的count 个字节复制到目的字符串的末尾处,最后添一空字符。
char
*
strncat (
char
*
dest,
const
char
*
src,
int
count)

...
{

_asm ...{
pushf
mov esi,src
mov edi,dest
xor al,al
mov ecx,0xffffffff
cld
repne scasb
dec edi
mov ecx,count
l1: dec ecx
js l2
lodsb
stosb
test al,al
jne l1
l2: xor al,al
stosb
popf
}
return dest;
}

5
. 将一个字符串与另一个字符串进行比较。
int
strcmp (
const
char
*
csrc,
const
char
*
ct)

...
{

_asm...{
pushf
mov edi,csrc
mov esi,ct
cld
l1: lodsb
scasb
jne l2
test al,al
jne l1
xor eax,eax
jmp l3
l2: mov eax,1
jl l3
neg eax
l3: popf
}
}