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

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

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

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

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

textual
Листинг программы
  1. program CountOnes;
  2.  
  3. var
  4.   X: integer;
  5.   Count: integer;
  6. begin
  7.   writeln('Input X');
  8.   Write('X: ');
  9.   readln(X);
  10.  
  11.   asm
  12.     MOV Count,0  {Count:=0}
  13.     MOV AX,X
  14.     TEST AX, AX
  15.     JZ @@Break
  16.   @@While:
  17.     INC Count    {Count:=Count+1}
  18.     MOV  BX,AX   {X:=X AND (X-1)}
  19.     DEC  BX
  20.     AND AX,BX
  21.   JNZ @@While
  22.   @@Break:
  23.   end;
  24.  
  25.   writeln('Count=', Count);
  26. 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

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы