今天在学习Window32汇编语言时,遇到了这样一段:
uMsg == WM_CHAR mov eax,wParam mov edi,offset szAllowedChar mov ecx,offset szAllowedChar repnz scasb
其中szAllowedChar="0123456789abcdefABCDEF";
从代码上看是循环判断输入的字符是不是szAllowChar中.但是对repnz scasb这句是不太懂.查看了Intel汇编手册最后终于明的了:
while (--ecx)
{
if (*(edi++) == al)
break;
}
也就是说如果找到的 edi 与输入的内容相同就直截退出循环,反之会一直核匹配下去.
其作用就是以ecx为时间片,循环扫描edi中是否有与al相同的数据。若有,则返回,没有直到时间片用完返回