12345.
Хочу возвести его в квадрат.
12345×12345=152399025 умножить одно на другое было бы слишком просто.
Что если без умножения?
Тут попробовал поэкспериментировать и собрал из 9 команд код, который за 6 циклов¹ дал тот же ответ. И вот мне интересно, а можно ли ещё быстрее/меньше кода? (Ко всему пришёл методом тыка)
¹ количество циклов зависит от исходного числа.
сдвиг битов?
Не без этого
А смысл? Процессор железом делает то же самое. Чуть более продвинутый вариант, точнее.
Зарядка для мозгов) Я несколько часов убил на решение и оптимизацию кода)
а код не покажешь? :)
Вот он, код настоящего павука-капиталиста
интрига! :)
Это как - кол-во циклов зависит от кода
Это там что за интересный ebx, ebx Неужели mov ebx, ebx Действительно интрига
Посчитай количество установленных битов в 12345.
Понял. Интересно, ща тоже попробую
и всё ты знаешь)
Ну хоть тут в команде не угадал) хотя смысл тот же)
А ещё я знаю, что 12345 * 0 = как повезёт.
Это для одного цикла и тут такой номер не прокатит
Если получится меньше 9 команд, ты об этом скажи, но код не выкладывай.
А esi кто обнулять будет?
И действительно, там мусор... Но почему я его раньше не замечал...
я только знаю как числа кратные степени двойки в степень возводить типа 8x8 это shl eax, 3 а тут магия какая то :)
В принципе, оно перемножает любые два числа
Но вверху надо бы esi обнулить. А в ebx можно другой множитель ставить.
Обсуждают сегодня