Witam,
Piszę program w assemblerze w którym podaję liczbę w postaci dziesiętnej, a program wypisuje liczbę jedynek znajdujących się w postaci binarnej tej liczby.
napisałem poniższy kod:
convert:
mov eax, ebx
mov ecx, 2
xor edx, edx
div ecx
cmp edx, 0
je resume
inc [result]
resume:
mov ebx, eax
cmp eax, 0
jne convert
W rejestrze ebx znajduje się liczba w której trzeba zliczyć jedynki.
Dla liczb z przedziału <0,999> program działa poprawnie, lecz dla liczb >999 występuje anomalia.
Do wyniku(ilości jedynek) jest dodawana jakby "liczba dziesięć". Pokażę to na przykładzie:
dla 512 wynikiem jest 1 -->prawidłowo
dla 999 wynikiem jest 8 -->prawidłowo
dla 1024 wynikiem jest 11 (czyli jakby odjąć 10, wynik byłby prawidłowy)
dla 1021 wynikiem jest 19 (czyli jakby odjąć 10, wynik byłby prawidłowy)
dla 2047 wynikiem jest 21(czyli jakby odjąć 10, wynik byłby prawidłowy)
Mógłby ktoś pomóc z tym problemem?





