Посчитать количество единиц в двухбайтовом числе - Assembler

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

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

Добрый день. У меня было задание: Есть двухбайтовое числов и необходимо посчитать количество единиц во всех разрядах, картных пяти. В общем, алгоритмически и программно у меня получился следующий код:
Листинг программы
  1. .data
  2. bay dw 4324h ; здесь моё число
  3. count db 0 ; здесь мой счётчик
  4. ORG 100h
  5. start:
  6. mov ax,[bay]
  7. mov bx,0 ; на данный момент, не несёт смысла, ибо присвоить чрез mov ax,[count] не могу.
  8. b:
  9. and al,1
  10. add [count],al
  11. shl ax,5
  12. cmp ax,0
  13. jnz b
  14. int 20 h
  15. end start
Я немного трою и не могу понять, как узнать, где и что, в итоге в переменной count, ибо мне ещё нужно подставить 0000,0001 и любые другие числа для проверки работоспособности программы. Ещё, я попытался присводить значение count , в ax, но при попытке сделать это, в cmd пишет, что типы разные и так делать незя. Буду очень рад помощи! Спасибо!

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

textual
Листинг программы
  1. .model tiny
  2. .386
  3. .code
  4. .startup
  5.  
  6.  
  7.                 xor     al,al           ; результат (0)
  8.                 mov     dx,1000010000100001b    ; число
  9.         @@repeat:
  10.                 mov     ah,dl
  11.                 and     ah,1            ; получаем младший бит
  12.                 add     al,ah           ; добавляем сдвинутый бит к AL
  13.                 shr     dx,5            ; сдвигаем на 5 бит
  14.                 jnz     @@repeat        ; повторяем, если число не 0
  15.  
  16.                 add     al,'0'          ; преобразуем в цифру
  17.                 int     29h             ; выводим
  18.  
  19.                 int     20h
  20.  
  21. end

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

  1. Название переменной: al, значение: 0. Здесь происходит инициализация переменной al нулём.
  2. Название переменной: dx, значение: 1000010000100001b. Здесь происходит инициализация переменной dx двубайтовым числом.
  3. Название метки: @@repeat. Метка используется для создания цикла.
  4. Переменные: ah, dl. В переменной ah сохраняется копия значения переменной dl.
  5. Название переменной: ah. Здесь выполняется операция и между переменной ah и 1, чтобы получить младший бит.
  6. Название переменной: al. Здесь происходит операция сложения — сдвинутый бит добавляется к al.
  7. Здесь происходит сдвиг двубайтового числа на 5 бит.
  8. Переход к метке @@repeat для повторения цикла, если число не равно нулю.
  9. Здесь происходит преобразование результата в цифру.
  10. Происходит вызов прерывания для вывода результата.
  11. Происходит вызов прерывания для завершения программы.

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


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

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

10   голосов , оценка 4.1 из 5

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

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

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