Беззнаковое умножение алгоритмом Бута

Тема в разделе "WASM.BEGINNERS", создана пользователем AssemblerIA64, 29 фев 2008.

  1. AssemblerIA64

    AssemblerIA64 New Member

    Публикаций:
    0
    Регистрация:
    7 окт 2007
    Сообщения:
    160
    Умножаю 2 числа алгоритмом Бута:
    Код (Text):
    1. W = 32
    2. ; esi - множимое
    3. ; edx - множитель
    4. ; <edi:edx> - результат
    5. ubooth:
    6.         mov ecx, W-1
    7.         xor edi, edi
    8. L1:
    9.         bt edx, 0
    10.         jnc L2
    11.         add edi, esi
    12. L2:
    13.         shrd edx, edi, 31
    14.         shr edi, 1
    15.         loop L1
    16.         ret
    Не могу въехать, в чём ошибка. Подскажите, пожалуйста.
     
  2. AssemblerIA64

    AssemblerIA64 New Member

    Публикаций:
    0
    Регистрация:
    7 окт 2007
    Сообщения:
    160
    На Itanium'е хорошо - там есть команда shrp.
    А на X86 запутался что-то в сдвигах.

    P.S. MUL не предлагать :)
     
  3. diamond

    diamond New Member

    Публикаций:
    0
    Регистрация:
    21 май 2004
    Сообщения:
    507
    Адрес:
    Russia
    Код (Text):
    1. W = 32
    2. ; esi - множимое
    3. ; edx - множитель
    4. ; <edi:edx> - результат
    5. ubooth:
    6.         mov ecx, W        ; <---
    7.         xor edi, edi
    8. L1:
    9.         bt edx, 0
    10.         jnc L2
    11.         add edi, esi
    12. L2:
    13.         shrd edx, edi, 1    ; <---
    14.         shr edi, 1
    15.         loop L1
    16.         ret
     
  4. AssemblerIA64

    AssemblerIA64 New Member

    Публикаций:
    0
    Регистрация:
    7 окт 2007
    Сообщения:
    160
    diamond, благодарю.