Как подсчитать количество пар единиц в окружении нулей в массиве?
задан массив из 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.