Посчитать количество единиц в двухбайтовом числе - Assembler
Формулировка задачи:
Добрый день. У меня было задание: Есть двухбайтовое числов и необходимо посчитать количество единиц во всех разрядах, картных пяти. В общем, алгоритмически и программно у меня получился следующий код:
Я немного трою и не могу понять, как узнать, где и что, в итоге в переменной count, ибо мне ещё нужно подставить 0000,0001 и любые другие числа для проверки работоспособности программы.
Ещё, я попытался присводить значение count , в ax, но при попытке сделать это, в cmd пишет, что типы разные и так делать незя.
Буду очень рад помощи! Спасибо!
Листинг программы
- .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
Решение задачи: «Посчитать количество единиц в двухбайтовом числе»
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
Объяснение кода листинга программы
- Название переменной:
al
, значение:0
. Здесь происходит инициализация переменной al нулём. - Название переменной:
dx
, значение:1000010000100001b
. Здесь происходит инициализация переменной dx двубайтовым числом. - Название метки:
@@repeat
. Метка используется для создания цикла. - Переменные:
ah
,dl
. В переменной ah сохраняется копия значения переменной dl. - Название переменной:
ah
. Здесь выполняется операцияи
между переменной ah и 1, чтобы получить младший бит. - Название переменной:
al
. Здесь происходит операциясложения
— сдвинутый бит добавляется к al. - Здесь происходит сдвиг двубайтового числа на 5 бит.
- Переход к метке
@@repeat
для повторения цикла, если число не равно нулю. - Здесь происходит преобразование результата в цифру.
- Происходит вызов прерывания для вывода результата.
- Происходит вызов прерывания для завершения программы.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д