Применение логических инструкций - 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