repne指令和scasb指令解析

来源:互联网 发布:java特种兵 读后感 编辑:程序博客网 时间:2024/04/30 01:03
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有关系啊