Другие языки программирования и технологии

Программирование ассемблер. Дан массив из 8 байт. Посчитать количество байт, в которых число нулей и единиц одинаковое

Дан массив из 8 байт. Посчитать количество байт, в которых число нулей и единиц одинаковое.
Ассемблеров настолько много, что только их перечисление не уместится в лимит символов одного ответа.

.586
.model flat, C
option casemap :none

include windows.inc

printf proto :dword, :vararg
_getch proto
_exit proto :dword

.const
Len = 8

.data
Message1 db "Дан массив из 8 элементов: ", 13, 10, 0
Message2 db 13, 10, "Кол-во элементов, в которых число нулей и единиц одинаковое = %u", 0
ArrayItem db "%4X", 0
PromptQ db 13, 10, 10, "Для завершения работы нажмите любую клавишу... ", 0

.data?
Seed dd ?
Array db Len dup (?)

.code
N167513763:
    invoke printf, addr Message1
    rdtsc
    mov Seed, eax
    mov edi, offset Array
    mov ecx, Len
@@:
    mov eax, Seed
    imul eax, eax, 134775813
    inc eax
    mov Seed, eax
    stosb
    movzx ebx, byte ptr [edi-1]
    push ecx
    invoke printf, addr ArrayItem, ebx
    pop ecx
    loop @B

    mov ecx, Len
    mov esi, offset Array
    xor edx, edx
TestLoop:
    push ecx
    xor ebx, ebx
    lodsb
    mov ecx, 8
    mov ah, al
    not ah
@@:
    ror al, 1
    adc bl, bh
    ror ah, 1
    sbb bl, bh
    loop @B
    test bl, bl
    setz bl
    add edx, ebx
    pop ecx
    loop TestLoop

    invoke printf, addr Message2, edx

    invoke printf, addr PromptQ
    invoke _getch
    invoke _exit, NULL
    end N167513763


Элементы массива выводятся в шестнадцатеричной системе. Одинаковое количество нулей и единиц у элементов 74h, 5Ah, C3h и 56h.
EA
Eldaniz Asadov
51 590
Лучший ответ
крутите rol/ror и считайте биты 0/1, а потом сравнивайте
если у байта 11110000b т. е. 4=1 4=0 - одинаковы, то +1
Дмитрий Савин
Дмитрий Савин
55 358

Похожие вопросы