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: уже плохо понятно что происходит.


Ответы (0 шт):