Здравствуйте, Yankov Dmitry!
Вот Вам программа, подсчитывающая максимальное количество нулей
Программа для заданного числа дает ответ 7
Если что непонятно, спрашивайте. Растолкую. Если надо - подправим.
[code h=200]
.model small
.data
num dd 1234567890 ;наше число 499602D2H = 0100 1001 1001 0110 0000 0010 1101 0010b
.code
.386
start:
mov ax, @data
mov ds, ax
mov eax, num ;грузим число в регистр eax
call zeros ;считаем длину самой длинной последовательности нулей
mov ax, 4c00h
int 21h
;подсчет самой длинной последовательности нулей
;на входе - число в eax
;результат - в регистре eax
zeros proc
xor dx, dx ;dh - текущая длина, dl - максимальная
mov cx, 32 ;счетчик бит
zeros_loop: ;цикл по битам
shr eax, 1 ;выдвигаем младший бит в С
jnc zero_found ;0?
call CmpZeroGroup ;если единица, то проверяем, что мы имеем
jmp next ;на продолжение
zero_found: ;0!
inc dh ;считаем
next: ;на следуюий бит
loop zeros_loop ;по всем
call CmpZeroGroup ;проверим последнюю последовательность
mov al, dl ;длина максимальной последовательности нулей,
;старшие биты обнулены в результате сдвига
ret
zeros endp
;проверка группы нулевых бит
CmpZeroGroup proc
cmp dh, 0 ;есть, что проверять?
je CZG_ret ;нулей не было - на выход
cmp dh, dl ;что-то есть, сравним с максимальным
jbe CZG_clear ;меньше или равно - на обнуление текущего счетчика
mov dl, dh ;больше! - сохраним новый максимальный
CZG_clear:
mov dh, 0 ;обнулим счетчик для подсчета новой последовательности
CZG_ret:
ret
CmpZeroGroup endp
end start
[/code]
Об авторе:
"Если вы заметили, что вы на стороне большинства, —
это верный признак того, что пора меняться." Марк Твен