Подсчитать число единиц во всех разрядах заданного двоичного числа - Assembler

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

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

Подсчитать число единиц во всех разрядах заданного двоичного числа Х(вес) методом исключения единиц. Написать на паскале с ассемблерной вставкой!!!

Решение задачи: «Подсчитать число единиц во всех разрядах заданного двоичного числа»

textual
Листинг программы
program CountOnes;
 
var
  X: integer;
  Count: integer;
begin
  writeln('Input X');
  Write('X: ');
  readln(X);
 
  asm
    MOV Count,0  {Count:=0}
    MOV AX,X
    TEST AX, AX
    JZ @@Break
  @@While:
    INC Count    {Count:=Count+1}
    MOV  BX,AX   {X:=X AND (X-1)}
    DEC  BX
    AND AX,BX
  JNZ @@While
  @@Break:
  end;
 
  writeln('Count=', Count);
end.

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

  1. Объявляется переменная X типа integer для хранения введенного пользователем двоичного числа.
  2. Объявляется переменная Count типа integer для хранения количества единиц в двоичном числе.
  3. Пользователю выводится сообщение Input X.
  4. Пользователю предлагается ввести значение переменной X.
  5. Переход в блок ассемблерного кода.
  6. В ассемблерном коде переменная Count инициализируется нулем при помощи команды MOV.
  7. Значение переменной X заносится в регистр AX.
  8. Выполняется проверка регистра AX на равенство 0 при помощи команды TEST и переход к метке @@Break, если равенство выполняется.
  9. Если значение регистра AX не равно нулю, программа переходит к метке @@While.
  10. В цикле увеличивается значение переменной Count на 1 с помощью команды INC.
  11. Значение переменной X заносится в регистр BX.
  12. Из регистра BX вычитается 1.
  13. При помощи команды AND значения регистров BX и AX используются для обнуления крайней правой единицы в двоичном представлении числа.
  14. Если значение регистра AX после выполнения операции AND не равно 0, программа возвращается к метке @@While.
  15. После цикла происходит переход к метке @@Break.
  16. Завершение выполнения ассемблерного блока.
  17. Выводится значение переменной Count с помощью команды writeln. Этот код подсчитывает количество единиц в двоичном представлении числа, введенного пользователем.

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

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