Дан массив из 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 разрядов

Объяснение кода листинга программы

  1. .data massiv db ...; заполненный массив из 10 байт и плюс два нулевых байта count db 0; счетчик количества единиц в каждом третьем разряде
  2. .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
  3. @1: shld eax,ebx,3; по мере сдвига содержимое регистра EAX заполняется содержимым регистра EBX adc count,0; если была единичка в разряде, номер которого кратен трем -- инкриминируем счетчик shld ebx,edx,3; по мере сдвига содержимое регистра EBX заполняется содержимым регистра EDX shl edx,3; по мере сдвига содержимое регистра EDX заполняется нулями loop @1; пока не проверим все 96 разрядов

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

12   голосов , оценка 4 из 5
Похожие ответы