📄 the_lib.c
字号:
///////////////////////////////////////////////////////////////////
char * strcpy(char * dest, const char * src){ __asm__ ("cld\n" "1:\tlodsb\n\t" "stosb\n\t" "testb %%al,%%al\n\t" "jne 1b" :
:"S" (src),"D" (dest)); return dest;}int strcmp(const char * cs, const char * ct){ int __res;
__asm__ ("cld\n" "1:\tlodsb\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" "2:\tmovl $1,%%eax\n\t" "ja 3f\n\t" "negl %%eax\n" "3:" :"=a" (__res)
:"S" (cs),"D" (ct)); return __res;}void * memset(void * s, char c, int count){ __asm__ ("cld\n\t" "rep\n\t" "stosb" :
:"a" (c),"D" (s),"c" (count)); return s;}
unsigned char get_gs_byte(const char * addr)
{
unsigned char _v;
__asm__ ("movb %%gs:%1,%0"
:"=r" (_v)
:"m" (*addr));
return _v;
}
void put_gs_byte(char val,char * addr)
{
__asm__ ("movb %0,%%gs:%1"
:
:"r" (val),"m" (*addr));
return;
}
///////////////////////////////////////////////////////////////////
unsigned long get_gs_long(const unsigned long * addr)
{
unsigned long _v;
__asm__ ("movl %%gs:%1,%0"
:"=r" (_v)
:"m" (*addr));
return _v;
}
void put_gs_long(unsigned long val,unsigned long * addr)
{
__asm__ ("movl %0,%%gs:%1"
:
:"r" (val),"m" (*addr));
return;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -