MASM32. Посчитать количество диаграм 01 00 10 11

Рейтинг: 0Ответов: 0Опубликовано: 07.04.2023

написал программу, которая разделяет массив на участки по два бита, но результат выдает неправильный, если я ввел все 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

Ответы

Ответов пока нет.