Посчитать количество единиц в двухбайтовом числе - 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
для повторения цикла, если число не равно нулю. - Здесь происходит преобразование результата в цифру.
- Происходит вызов прерывания для вывода результата.
- Происходит вызов прерывания для завершения программы.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д