int strlengh(char *str)
int strlengh(char *str)
{
int lengh;
asm volatile(
"xorl %%edi,%%edi\n"
"abc:\n"
"lodsb\n" // # читает байт в строке в регистр al и автоматически устанавливает следующую позицию
"cmpb $0,%%al \n" // # если байт равен 0, значит end of string
"jz continue \n"
"incl %%edi \n" // # счетчик
"jmp abc \n" // # повторить...
"continue:\n"
"movl %%edi, %[res]\n"
:[res]"=d"(lengh)
:[str]"S" (str)
);
cout<<lengh;
return lengh;
}
|