extern inline int strlen(const char * s)
{
register int __res__asm__('cx');
__asm__("cld\n\t"
"repne\n\t"
"scasb\n\t"
"notl %0\n\t"
"decl %0"
:"=c"(__res):"D"(s),"a"(0),"0"(0xffffffff):"di");
return __res;
}
你要把两个指令搞懂,第一个是repe和repne,前者是repeat equal,意思是相等的时候重复,后者是repeat not equal,不等的时候重复;每循环一次cx自动减一,所以MOV CX,N,n就是循环次数;第二个是scasb 意思是【al】-【di】,也就是比较查询di中是否有al中的字符,没比较一次di自动变化,指向上一个或下一个单元。
,若di中有x则跳出循环
MOV AL,X
MOV CX,N
REPE SCASB
意思就是在n次内,若di中没有x,跳出循环
都和al有关系啊