Дан массив из 10 байт. Посчитать количество единиц во всех разрядах, кратных трём: 3, 6, 9, …, 75, 78 - Assembler
Формулировка задачи:
Помогите пожалуйста.
Решение задачи: «Дан массив из 10 байт. Посчитать количество единиц во всех разрядах, кратных трём: 3, 6, 9, …, 75, 78»
textual
Листинг программы
.data massiv db ...; заполненный массив из 10 байт и плюс два нулевых байта count db 0;счетчик количества единиц в каждом третьем разряде .code mov esi,offset massiv mov eax,dword [esi]; в eax с 79 по 64 разряды массива mov ebx,dword [esi+4]; в eax с 63 по 32 разряды массива mov edx,dword [esi+8]; в eax с 31 по 0 разряды массива и плюс 16 нулевых разрядов mov ecx,32; 96/3=32 @1: shld eax,ebx,3; по мере сдвига содержимое регистра EAX заполняется содержимым регистра EBX adc count,0; если была единичка в разряде, номер которого кратен трем -- инкриминируем счетчик shld ebx,edx,3; по мере сдвига содержимое регистра EBX заполняется содержимым регистра EDX shl edx,3; по мере сдвига содержимое регистра EDX заполняется нулями loop @1; пока не проверим все 96 разрядов
Объяснение кода листинга программы
- .data massiv db ...; заполненный массив из 10 байт и плюс два нулевых байта count db 0; счетчик количества единиц в каждом третьем разряде
- .code mov esi,offset massiv; загрузка указателя на массив mov eax,dword [esi]; в eax с 79 по 64 разряды массива mov ebx,dword [esi+4]; в eax с 63 по 32 разряды массива mov edx,dword [esi+8]; в eax с 31 по 0 разряды массива и плюс 16 нулевых разрядов mov ecx,32; 96/3=32
- @1: shld eax,ebx,3; по мере сдвига содержимое регистра EAX заполняется содержимым регистра EBX adc count,0; если была единичка в разряде, номер которого кратен трем -- инкриминируем счетчик shld ebx,edx,3; по мере сдвига содержимое регистра EBX заполняется содержимым регистра EDX shl edx,3; по мере сдвига содержимое регистра EDX заполняется нулями loop @1; пока не проверим все 96 разрядов
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д