MASM32. Посчитать количество диаграм 01 00 10 11
написал программу, которая разделяет массив на участки по два бита, но результат выдает неправильный, если я ввел все 4 единцы в массив, то ответ получается 40, подскажите пожалуйста, не могу найти ошибку в коде.
.386
.model flat, stdcall
includelib c:\masm32\lib\kernel32.lib
ExitProcess PROTO, :DWORD
.data
inp dd 1,1,1,1
N dd 4
count00 dd 0 ; счетчики для диограм
count01 dd 0
count10 dd 0
count11 dd 0
.code
Winmain PROC
mov ecx, N
mov esi, offset inp ; загружаем массив в еsi offset - альтернатива lea ( копирует адрес)
outer_loop:
mov eax, [esi] ; внешний цикл
add esi, 4
mov ebx, 0 ;
;внутренний цикл
inner_loop:
shr eax, 2 ; побитовый сдвиг операнда вправо
mov edx, eax ;
and edx, 11 ; выполняет побитовую конъюнкцию над приёмником и источником, результат записывает в приёмник
cmp edx, 00 ; если edx == 0b00, переход к count00_inc
je count00_inc ;
cmp edx, 01 ;
je count01_inc ;
cmp edx, 10 ;
je count10_inc ;
cmp edx, 11 ;
je count11_inc ;
count00_inc:
add dword ptr [count00], 1 ;
jmp next_iter
count01_inc:
add dword ptr [count01], 1
jmp next_iter
count10_inc:
add dword ptr [count10], 1
jmp next_iter
count11_inc:
add dword ptr [count11], 1
next_iter:
inc ebx
cmp ebx, 16
jne inner_loop
loop outer_loop
push 0
call ExitProcess
Winmain endp
end winmain
Источник: Stack Overflow на русском