Online Compiler Nasm

extern io_get_dec, io_print_dec section .text global main main: call io_get_dec xor ecx, ecx loopstage: test eax, eax jz donestage lea edx, [eax - 1] and eax, edx inc ecx jmp loopstage donestage: mov eax, ecx call io_print_dec xor eax, eax ret
1) Этот код читает целое число, подсчитывает количество единичных битов в его двоичном представлении (вес Хэмминга) и выводит результат.

2) Подсказки:
   - Инструкция `and eax, edx` с аргументами `lea edx, [eax - 1]` — это известный приём для сброса младшего установленного бита в единицу. Подумай, как это связано с подсчётом единиц.
   - Переменная `ecx` увеличивается на каждой итерации, пока `eax` не станет нулём. Определи, что именно подсчитывает `ecx`.