[Ненормальное программирование, Assembler, Математика] Перемножение чисел на ассемблере без умножения

Автор Сообщение
news_bot ®

Стаж: 6 лет 9 месяцев
Сообщений: 27286

Создавать темы news_bot ® написал(а)
23-Июн-2021 03:30

Как-то вдруг задумался о перемножении чисел без использования инструкций умножения.
Нужно сказать, что в корне данной задачи лежит сдвиг числа на то количество бит, на котором месте эти биты находятся. Собственно и обнаружил я эту закономерность совершенно случайно.
В результате недолгого мозгового штурма получился следующий ниже код, в регистре esi получаем произведение eax * ebx.
Разумеется представленная версия кода ограничивает результат 32-мя битами, но ведь разрядность при желании можно и расширить, главное - концепция.
xor     esi, esi      ; обнулим мусор
        mov     eax, 12345    ; первое число
        mov     ebx, 23456    ; второе число
@@:     mov     edx, eax      ; сохраним число для сдвигов
        bsf     ecx, ebx      ; находим установленный бит
        btc     ebx, ecx      ; удалим найденный ранее установленный бит
        shl     edx, cl       ; сдвигаем число на индекс найденого бита
        add     esi, edx      ; складываем полученные в результате сдвигов числа
        or      ebx, ebx      ; проверяем есть ли ещё установленные биты
        jnz     @B            ; если есть, поработаем ещё
        ret                   ; иначе - выходим

===========
Источник:
habr.com
===========

Похожие новости: Теги для поиска: #_nenormalnoe_programmirovanie (Ненормальное программирование), #_assembler, #_matematika (Математика), #_sdvig (сдвиг), #_shl, #_assembler, #_assembler (ассемблер), #_umnozhenie (Умножение), #_nenormalnoe_programmirovanie (
Ненормальное программирование
)
, #_assembler, #_matematika (
Математика
)
Профиль  ЛС 
Показать сообщения:     

Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете прикреплять файлы к сообщениям
Вы не можете скачивать файлы

Текущее время: 22-Ноя 19:46
Часовой пояс: UTC + 5