Подскажите пожалуйста, как перемножить: в мм0 и мм1 занесены по 2 DWORDa, т.е. мм0: DWORD01 DWORD02 мм1: DWORD11 DWORD12 Нужно перемножить их так, чтобы в мм2 получилось: мм2: DWORD01*DWORD11 DWORD02*DWORD12 Пытался найти нечто подобное в интеловском мануале, но безуспешно, и из-за этого приходится выгружать данные в переменную, оттуда в регистры о.н., там перемножать, и потом обратно пересылать в ММХ регистры. Медленновато получается...
> "Пытался найти нечто подобное в интеловском мануале, но безуспешно" Ну ес-но, т.к. непосредственной операции перемножения двух dword'ов на MMX регистрах нет, потому что в общем случае DWORD*DWORD = QWORD 64 бит. А посему есть SSE2 инструкция PMULUDQ, которая перемножает младшие unsigned dword'ы и сохраняет результат как qword. А в наборе MMX Technology есть операция PMADDWD. Ее можно использовать для перемножения двух unsigned dword, если числа лежат в диапазоне 0..65535 (старшие ворды = 0)
А каким отладчиком можно воспользоваться для отладки кода при использовании расширенных инструкций ММХ типа pmuludq, paddq в ХР (32 бит). Fasm их понимает, а отладчик OllyDbg - нет.
Есть pmulld, но это инструкция SSE4.1 и работает только с xmm регистрами. Перемножает 4 пары dword`ов со знаком.
tar4 Для олли есть плагины заменяющие оллин дизасм. Я такой помню только один - FullDisasm. Я по-моему про него уже не раз говорил.