Умножение с использованием ММХ

Тема в разделе "WASM.BEGINNERS", создана пользователем kurt84, 27 окт 2005.

  1. kurt84

    kurt84 New Member

    Публикаций:
    0
    Подскажите пожалуйста, как перемножить:



    в мм0 и мм1 занесены по 2 DWORDa, т.е.

    мм0: DWORD01 DWORD02

    мм1: DWORD11 DWORD12



    Нужно перемножить их так, чтобы в мм2 получилось:



    мм2: DWORD01*DWORD11 DWORD02*DWORD12



    Пытался найти нечто подобное в интеловском мануале, но безуспешно, и из-за этого приходится выгружать данные в переменную, оттуда в регистры о.н., там перемножать, и потом обратно пересылать в ММХ регистры. Медленновато получается...
     
  2. leo

    leo Active Member

    Публикаций:
    0
    > "Пытался найти нечто подобное в интеловском мануале, но безуспешно"

    Ну ес-но, т.к. непосредственной операции перемножения двух dword'ов на MMX регистрах нет, потому что в общем случае DWORD*DWORD = QWORD 64 бит. А посему есть SSE2 инструкция PMULUDQ, которая перемножает младшие unsigned dword'ы и сохраняет результат как qword. А в наборе MMX Technology есть операция PMADDWD. Ее можно использовать для перемножения двух unsigned dword, если числа лежат в диапазоне 0..65535 (старшие ворды = 0)
     
  3. tar4

    tar4 New Member

    Публикаций:
    0
    А каким отладчиком можно воспользоваться для отладки кода
    при использовании расширенных инструкций ММХ типа pmuludq, paddq в ХР (32 бит). Fasm их понимает, а отладчик OllyDbg - нет.
     
  4. rozarom

    rozarom New Member

    Публикаций:
    0
    что никто не знает?
     
  5. s_d_f

    s_d_f New Member

    Публикаций:
    0
    Есть pmulld, но это инструкция SSE4.1 и работает только с xmm регистрами. Перемножает 4 пары dword`ов со знаком.
     
  6. Z3N

    Z3N New Member

    Публикаций:
    0
    tar4
    Для олли есть плагины заменяющие оллин дизасм. Я такой помню только один - FullDisasm.
    Я по-моему про него уже не раз говорил.