Как подсчитать количество пар единиц в окружении нулей в массиве?

задан массив из 8 байтов в TASM, например этот массив

arr db 01101100b, 11010011b, 01010101b, 11111111b, 00000000b, 10101010b, 00110011b, 01100110b

Рассматривая это как массив из 64 бит. Я хочу посчитать количество пар единиц, окруженных нулями. Конец последовательности рассматривается как ноль. Вот это мой код программы на TASM:

.MODEL SMALL
.STACK 100h
.DATA
    arr DB 10100110b, 01101010b, 10011001b, 10110101b, 00000000b, 10101010b, 00110011b, 01100110b
    counter db 0
.CODE
    MAIN PROC
        MOV AX, @DATA
        MOV DS, AX
        XOR BX, BX
        MOV SI, OFFSET arr
        MOV CX, 8
        LOAD_AL:
            MOV DX, CX
            MOV AL, [SI]
            MOV CX, 8
        SHIFT:
            CLC
            RCL AL, 1
            RCL BL, 1
            AND BL, 00001111b
            CMP BL, 00000110b
            JNZ NOT_A_PAIR_OF_ONES
            INC BX
            INC counter
        NOT_A_PAIR_OF_ONES:
            LOOP SHIFT
            MOV CX, DX
            INC SI
            LOOP LOAD_AL
        MOV AH, 4Ch
        INT 21h
    MAIN ENDP
END MAIN

После выполнения программы в TASM в Dosbox значение регистра BX не равно 9 (9 пар единиц, окруженных нулями), но в NASM версии программы, код работает корректно. Кто-нибудь может мне помочь, пожалуйста! Уже 10 дней не могу найти решение. После выполнения программы она выдает случайное значение (например F84B) для регистра BX.


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