Страница 1 из 1
Посчитать нули в слове
Добавлено: 21 дек 2006, 23:15
beryllium
Подскажите пожалуйста, как посчитать количество нулей в слове? Может алгоритм какой есть(команда)?
Re: Посчитать нули в слове
Добавлено: 22 дек 2006, 09:05
somewhere
Алгоритм есть, как и у любой задачи. Способов довольно много, можно пользоваться сдвигом, а можно использовать другие инструкции:
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 будет содержаться кол-во нулей.
Посчитать нули в слове
Добавлено: 22 дек 2006, 18:44
beryllium
Такой вариант у меня не прошел. 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 за идею.