Я переучиваю ассемблер, который я использовал на очень старых машинах MS-DOS!!!
Это мое понимание того, как должна выглядеть эта функция. Он компилируется, но сбой SIGSEGV при попытке установить 0xffffffff
в ecx
.
Код запускается в виртуальной машине с 32-разрядным Debian 9. Любая помощь будет оценена.
int getStringLength(const char *pStr){
int len = 0;
char *Ptr = pStr;
__asm__ (
"movl %1, %%edi\n\t"
"xor %%al, %%al\n\t"
"movl 0xffffffff, %%ecx\n\t"
"repne scasb\n\t"
"subl %%ecx,%%eax\n\t"
"movl %%eax,%0"
:"=r" (len) /*Output*/
:"r"(len) /*Input*/
:"%eax" /*Clobbered register*/
);
return len;
}