Assembler. Дан массив из 6 байт. Рассматривая его, как массив из 48 бит, посчитать число двух единиц, стоящих между нулями
Дан массив из 6 байт. Рассматривая его, как массив из 48 бит, посчитать число двух единиц, стоящих между нулями. Конец и начало последовательности рассматривать как нули.
jmp @start
//
// this must be in data segment!
@bitarray: db 01000010b, 01100010b, 01000011b, 01001010b, 01000010b, 01010010b
@start:
sub edx, edx // count
mov ebx, 48 // number of bits
@loopmain:
// see if we got 0110 in last byte
mov al, byte ptr @bitarray[5]
and al, 0Fh
cmp al, 06
jnz @skip
inc edx // increase counter
@skip:
// shift whole array to righ through carry by 1 bit
lea esi, @bitarray
lea edi, @bitarray
mov ecx, 6
clc
@loopshift:
lodsb
rcr al, 1
stosb
loop @loopshift
// do this 48 times (6 * 8 = 48)
dec ebx
jnz @loopmain
end;
Код был найден на просторах интернета. Подскажите, пожалуйста, как можно его упростить?
Начиная с @loopmain: уже плохо понятно что происходит.