the codes:
extern inline int strncmp(const char * cs, const char * ct, int count)
{
register int __res;
__asm__("cld\n"
"1:\tdecl %3\n\t"
"js 2f\n\t"
"lodsb\n\t"
"scasb\n\t"
"jne 3f\n\t"
"testb %%al, %%al\n\t"
"jne 1b\n"
"2:\txorl %%eax,%%eax\n\t"
"jmp 4f\n"
"3:\tmovl $1,%%eax\n\t"
"j1 4f\n\t"
"negl %%eax\n"
"4:"
:"=a" (__res):"D" (cs), "S" (ct), "c" (count):"si","di","cx");
return __res;
}
I don’t understand the f in “js 2f\n\t” and the b in “jne 1b\n“, How to
understand this ? which book I should look? Thank you.
In this context
fmeans forward andbmeans backward. Sojs 2fmeans jump forward to label 2, if sign set.You’ll want to look into
gcc inline assembly. I can’t seem to find any reference online to include this bit, but I know you can find it in Professional Assembly Language.Why can’t we use named labels ? To quote from the book:
So what can we do ?
About modifiers: