Посчитать нули в слове

Низкоуровневое программирование портов, микроконтроллеров и т.д.

Модератор: Andy

Ответить
beryllium
Сообщения: 3
Зарегистрирован: 21 дек 2006, 16:00

Подскажите пожалуйста, как посчитать количество нулей в слове? Может алгоритм какой есть(команда)?
Аватара пользователя
somewhere
Сообщения: 1858
Зарегистрирован: 31 авг 2006, 17:14
Откуда: 71 RUS
Контактная информация:

Алгоритм есть, как и у любой задачи. Способов довольно много, можно пользоваться сдвигом, а можно использовать другие инструкции:

BTC op1, op2 (Bit Test and Compliment) - помещает инвертированное значение бита op1, указанного в op2 во флаг CF. Исходя из этого легко считаются нули:

Код: Выделить всё

...
mov ax, YourWord
sub cx, cx
@k1:
btc ax, cl
adc ch, 0
inc cl
cmp cl, 16
jnz @k1
...
На выходе в CH будет содержаться кол-во нулей.
It's a long way to the top if you wanna rock'n'roll
beryllium
Сообщения: 3
Зарегистрирован: 21 дек 2006, 16:00

Такой вариант у меня не прошел. TASM выдавал ошибку на строчке
btc ax, cl
Как я понял, команда btc для процессоров 386 и i486. Зато немного подумав, воспользовался сдвиговой операцией shr :
mov ax, MyWord
xor cx, cx
xor dx, dx
mov dx, 16
mov cl, 1

@k1:
shr ax, cl
adc ch, 0
dec dx
jnz @k1

mov al,16
sub al,ch
В цикле посчитали единицы, а потом вычли их из 16 = количество нулей
PS thanks developer за идею.
Ответить