Assembler - sprawdzanie nadluzszego ciagu liczby

0

Witam,
próbuje napisać kod, który sprawdza najdłuższy ciąg jedynek w danej liczbie, np 10166 = (10011110110110)2 czyli najdluzszy ciag to 4, a mi wyswietla 2. Ktoś mógłby pomóc w przekształceniu kodu na działający? Moze być w nim bardzo dużo błedów, ale jestem totalnym newbie w tym języku i zaczynam się go uczyć.

#include <stdio.h>
int main()
{
    int x = 1523;
    int y = 0;
    asm volatile (
    ".intel_syntax noprefix;"
    "mov eax,%1;"
    "xor ebx, ebx;"
    "petla:"
    	"mov ecx, 0;"
    "skok3:"
        "mov ebx,ecx;"
    	"mov ecx, 0;"
    	"and eax,eax;"
    	"jz skok2;"
    	"shl eax,1;"
    	"jnc petla;"
    "skok:"
        "inc ecx;"
        "shl eax,1;"
        "jc skok;"
    "cmp ecx,ebx;"
    "jg skok3;"
    "and eax,eax;"
    "jnz petla;"
    "skok2:"
        "mov %0,ebx;"
    ".att_syntax prefix;"
    :"=r"(y)
    :"r"(x)
    :"eax","ebx","ecx"
    );
    printf("y=%i\n",y);
    return 0;
}
0

Po co się gnębisz się assemblerem dla takiego prostego zadania?
Kompilator C++ jest bardzo cwany i nie trzeba tak kombinować: https://godbolt.org/z/9bC3-y https://godbolt.org/z/LRta8m

0
MarekR22 napisał(a):

Po co się gnębisz się assemblerem dla takiego prostego zadania?
Kompilator C++ jest bardzo cwany i nie trzeba tak kombinować: https://godbolt.org/z/PCdjYB https://godbolt.org/z/IzOSBy

Chodzi o to, że jest to zadanie na jutrzejsze zajęcia, więc robię tak jak pokazywał na zajęciach prowadzący

1 użytkowników online, w tym zalogowanych: 0, gości: 1