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

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

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

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

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

textual
Листинг программы
.model tiny
.386
.code
.startup
 
 
                xor     al,al           ; результат (0)
                mov     dx,1000010000100001b    ; число
        @@repeat:
                mov     ah,dl
                and     ah,1            ; получаем младший бит
                add     al,ah           ; добавляем сдвинутый бит к AL
                shr     dx,5            ; сдвигаем на 5 бит
                jnz     @@repeat        ; повторяем, если число не 0
 
                add     al,'0'          ; преобразуем в цифру
                int     29h             ; выводим
 
                int     20h
 
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
Похожие ответы