Cześć mam problem z assemblerem wplecionym w kod języka C. Muszę policzyć długość najdłuższego ciągu identycznych znaków w łańcuchu i.. nie mam bladego pojęcia gdzie robię błąd. Z góry dziękuję za pomoc.
#include <stdio.h>
/*
* Po wykonaniu programu zmienna "y" powinna zawierać długość najdłuższego ciągu identycznych znaków w łańcuchu "s",
* np. jeżeli s="AaaaBBXBBX", to y powinno wynosić 3.
*/
int main(void)
{
char s[] = "AaaaBBXBBX";
int y=0;
asm volatile
( ".intel_syntax noprefix;"
"mov eax, %1;"
"xor ebx,ebx;"
"xor ecx,ecx;"
"mov edx, %1;"
"petla:"
"mov edx, eax;"
"mov al,[eax];"
"cmp al,0;"
"je wyjscie;"
"inc edx;"
"mov dl, [edx];"
"inc ebx;"
"cmp al, dl;"
"jne skok;"
"cmp ecx,ebx;"
"jge skok2;"
"mov ecx,ebx;"
"xor ebx,ebx;"
"inc eax;"
"jmp petla;"
"skok:"
"xor ebx,ebx;"
"inc eax;"
"jmp petla;"
"skok2:"
"inc eax;"
"jmp petla;"
"wyjscie:"
"mov %0, ecx;"
".att_syntax prefix;"
: "=r" (y)
: "r" (s)
: "eax","ebx","ecx","edx"
);
printf("s=%s, y=%d\n",s, y);
return 0;
}