Применение логических инструкций - Assembler (224316)

Узнай цену своей работы

Формулировка задачи:

Доброго времени суток) Такая задача:

Дан массив из 10 байт. Посчитать кол-во байт с числом единиц в байте равным 3.

Помогите с кодом на asm,вот на C++:
char a[10]="proba PeRA";
int count=0;
for( int i=0; i<10; i++) // символы анализируем
{
  int bits=0; // сколько единичек
  for( int b=0; b<8; b++) // все биты проверяем
    if( a[i]&(1<<b) ) bits++; // о, единичка!
  if( bits==3 ) count++; // 3 штуки -> нужный символ!
}
// выдать count
правка
#include<iostream>
using namespace std;
int main()
{
    int a[10]={7,2,3,7,5,6,7,8,9,10};
    int count=0;
    for( int i=0; i<10; i++) // символы анализируем
    {
        int bits=0; // сколько единичек
        for( int b=0; b<8; b++) // все биты проверяем
            if( a[i]&(1<<b) ) bits++; // о, единичка!
        if( bits==3 ) count++; // 3 штуки -> нужный символ!
    }
    cout<<count;
}

Решение задачи: «Применение логических инструкций»

textual
Листинг программы
      xor     rcx,rcx
      xor     al,al
  @loop10:
      xor     dl,dl
      mov     dh,[rdi+rcx]
      shr     dh,1    // 0
      adc     dl,0
      shr     dh,1    // 1
      adc     dl,0
      shr     dh,1    // 2
      adc     dl,0
      shr     dh,1    // 3
      adc     dl,0
      shr     dh,1    // 4
      adc     dl,0
      shr     dh,1    // 5
      adc     dl,0
      shr     dh,1    // 6
      adc     dl,0
      shr     dh,1    // 7
      adc     dl,0
      cmp     dl,3
      sete    ah
      add     al,ah
      inc     rcx
      cmp     rcx,9
      jbe     @loop10

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

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