Другие языки программирования и технологии

Создание алгоритма для решения задачи на Ассемблере!

Значит есть такая задача: В 4 регистрах (к примеру dh,dl,bh,bl) занесены 4 цифры. Нужно их между собой сравнить и если между ними есть ровно 3 повторяющиеся вывести об этом сообщение. Вот и не знаю с какой стороны к этому подойти. Подскажите пожалуйста в какую сторону копать и поподробнее если не сложно. Спасибо!
Ilya Panch
Ilya Panch
182
Для последовательности dl dh bl bh:
cmp dh, bl
jne .false
cmp dl, bh
je .false
cmp dh, dl
je .true
cmp bl, bh
je .true
.false:
; действия, если нет группы из 3
.true:
; действия, если есть группа из 3
Рома Астафьев
Рома Астафьев
37 544
Лучший ответ
Попарно заксорь их (получится 6 пар) и посчитай кол-во нулей, если ровно 3 нуля и 3 не нуля - значит у тебя 3 одинаковые а одна различная)
Ни одного нуля - все разные
Один ноль - пара
Два нуля - 2 пары
Три нуля - тройка
Шесть нулей - все числа одинаковы)
ПД
Павел Дригин
74 082
думаю надо создать процедуру, в которой будет поочерёдно отниматься по очереди один регистр из другого. Потом смотреть регистр статуса ( или какой том у х86) или может бит какой, что становится в 1, когда результат операции равен нулю. Завести счётчик, который будет делать декремент, каждый раз, если статус операции будет равен 1, проверять прцедурой в каждом цикле не равен ли результат вычитания 0 если от счетчика отнять 3. Если равен, то вывести сообщение. Как то так. Ассемблировал лет 15 назад, может чтоизменилось сейчас...
придется сравнить все шесть вариантов пар - и подсчитать сколько равных вариантов пар. для трех равных пар - насчитаешь 3 и тогда вывидишь соответствующее сообщение
MS
Mohamedrizo Shahidi
1 045