Другие языки программирования и технологии
Программирование ассемблер. Дан массив из 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.
.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.
крутите rol/ror и считайте биты 0/1, а потом сравнивайте
если у байта 11110000b т. е. 4=1 4=0 - одинаковы, то +1
если у байта 11110000b т. е. 4=1 4=0 - одинаковы, то +1
Похожие вопросы
- Ассемблер. Дан массив из 6 байт. Посчитать кол-во нулей.
- Дан массив из 8 байт. Рассматривая его, как массив из 64 бит посчитать длину самой длинной последовательности единиц.
- Дан массив Z(10). Вставить число Р между теми числами, которые образуют пару с одинаковыми знаками. Помогите) пжста
- Помогите :) Дан массив из n целых чисел. Найти количество встречающихся равных чисел.
- C# Дан массив размера N. Найти 2 элемента массива, сумма которых наиболее близка к максимуму массива и поменять
- Дан массив, состоящий из цифр. Удалить из него все отрицательные числа. Делфи
- Здравствуйте помогите в программирование на ассемблере. Нужно зеркально отобразить массив из 256 байт
- Дан целочисленный двумерный массив, размерности n х m. Заменить все отрицательные числа нулем
- Pascal . Дан массив вещественных чисел. Найти сумму элементов, номера которых являются простыми числами
- помогите? Дан массив целых чисел (n=15),