diff --git a/kernel/common/glib.h b/kernel/common/glib.h index d1fe2b4b..6fa95fa1 100644 --- a/kernel/common/glib.h +++ b/kernel/common/glib.h @@ -231,6 +231,38 @@ void *memcpy(void *dst, void *src, long Num) : "memory"); return dst; } + +/* + 比较字符串 FirstPart and SecondPart + FirstPart = SecondPart => 0 + FirstPart > SecondPart => 1 + FirstPart < SecondPart => -1 +*/ + +int strcmp(char * FirstPart,char * SecondPart) +{ + register int __res; + __asm__ __volatile__ ( "cld \n\t" + "1: \n\t" + "lodsb \n\t" + "scasb \n\t" + "jne 2f \n\t" + "testb %%al, %%al \n\t" + "jne 1b \n\t" + "xorl %%eax, %%eax \n\t" + "jmp 3f \n\t" + "2: \n\t" + "movl $1, %%eax \n\t" + "jl 3f \n\t" + "negl %%eax \n\t" + "3: \n\t" + :"=a"(__res) + :"D"(FirstPart),"S"(SecondPart) + : + ); + return __res; +} + void *memset_c(void *dst, unsigned char c, ul n) { unsigned char *s = (unsigned char *)dst;