|
|
| Посл.отвђт | Сообщенiе |
|
|
Дата: Июн 15, 2004 18:47:51 The Svin лучший из подобных - Фог, причём на 99% это аппаратная оптимизация. Здесь я имею в виду только "статьи по обезбранчиванию". По этой теме, имхо, достаточно Фог + мануалы производителей... Остальное - дело головы на плечах... volodya Гадкий ты. Ну ладно... На самом деле я не умею программировать на ассемблере... |
|
|
Дата: Июн 15, 2004 20:56:19 На самом деле я не умею программировать на ассемблере Что ж. У каждого свои недостатки :) Остальное - дело головы на плечах... Не надо мне тут демагогию разводить! Демагогию разводить - это мое дело :) Свин, не слушайте всяких тут. Если вы мне турториал с алгоритмами напишете и пройдете от простого к сложному, поэтапно показывая как можно улучшить, то я за такое вам еще чего-нибудь достану вроде Уоррена :) |
|
|
Дата: Июн 15, 2004 21:00:09 captain cobalt Чушь, какое отношение обезбранчивание имеет к мануалам производителя и Фогу? У него на эту тему пара куцых примеров с мало кому интересными задачами. |
|
|
Дата: Июл 9, 2004 19:34:16 Предлагаю новое упражнение: Есть 16-ричное число в регистре ebx, требуется в регистр eax поместить маску, в которой единицы соответствуют тем разрядам в которых в ebx находятся Fы(или нули смотря что проще будет). Например: если ebx=1F03CF60h, то на выходе должно быть eax=0F000F00h. Оптимизировать нужно в первую очередь по скорости, а потом по размеру. Регист ebx портить нельзя. |
|
|
Дата: Июл 9, 2004 23:28:29 MMX наверно наиболее удобен в такой задаче. Или предлогается ограничится целочисленным устройством? |
|
|
Дата: Июл 10, 2004 00:42:57 Можно и для MMX, а пока у меня получается такой вариант: mov edx,ebx mov eax,ebx and edx,77777777h and eax,88888888h add edx,11111111h and eax,edx shr eax,3 imul eax,15; или lea eax,[eax*3]/lea eax,[eax*5] лучше? и зависимость между последними четырьмя командами мне совсем не нравится. |
|
|
Дата: Июл 10, 2004 04:10:32Накатал в дебагере. Можно уловить принцип и сократить. Первые три команды просто для того чтобы загрузить 0F0F..0F в mm0. Они могут быть заменены одной movd mm0,mask где mask типа mask dd 0F0F0F0Fh если mask не в кеше то следующие три команды будут быстрее. Они также будут короче если mask адресовать через офсет. 0F74C0 PCMPEQB MM0,MM0 0F71D0 0C PSRLW MM0,0C 0F67C0 PACKUSWB MM0,MM0 ;Тут преобразование 0F6EC8 MOVD MM1,EBX ;данные из ebx 0F6FD1 MOVQ MM2,MM1 0FDBC8 PAND MM1,MM0 0F73D2 04 PSRLQ MM2,4 0FDBD0 PAND MM2,MM0 0F74C8 PCMPEQB MM1,MM0 0F74D0 PCMPEQB MM2,MM0 0FDBC8 PAND MM1,MM0 0FDBD0 PAND MM2,MM0 0F73F2 04 PSLLQ MM2,4 0FEBCA POR MM1,MM2 0F7EC9 MOVD EAX,MM1 ;результат в eax или куда нужно |
|
|
Дата: Авг 9, 2004 11:57:59 С jCC-переходами xor al,66h test al,0F0h jz found test al,0Fh jnz not_found found: Без переходов xor al,66h test al,0f0h setz ah and al,0fh cmp al,1 adc ah,0 ; ZF=1 (zero) - значит нет |
|
Powered by miniBB 1.6 © 2001-2002
Время загрузки страницы (сек.): 0.093 |