Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 04.02.2014, 14:59   #11
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

На несколько байт короче и на несколько тактов процессора быстрей? Бешенный успех, бурные аплодисменты
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 04.02.2014, 15:26   #12
maloun
Форумчанин
 
Аватар для maloun
 
Регистрация: 03.01.2011
Сообщений: 233
По умолчанию

Код:
procedure GetXORArray(x:Byte; out res:ByteLenArray); register;
asm
        xor     ecx, ecx
@@loop:
        mov     ah, cl
        xor     ah, al
        mov     [edx+ecx], ah
        inc     cl
        jnz     @@loop
        retn
end;

procedure GetXORArray2(x:Byte; out res:ByteLenArray); register;
var
  i:Byte;
begin
  for i:=0 to 255 do
    res[i]:=i xor x;
end; 

{
50 млн вызовов
время GetXORArray: 8362
время GetXORArray2: 9609
}
что вы имеете против оптимизации?
пыжок
maloun вне форума Ответить с цитированием
Старый 04.02.2014, 15:35   #13
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Цитата:
что вы имеете против оптимизации?
Ни чего. Наоборот. Только не ASM-ом, разве что в критичных случаях, когда это очень-очень актуально. А здесь, если правильно понял, на 50 млн обращений чуть больше секунды выграли
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 04.02.2014, 16:35   #14
galgal
Новичок
Джуниор
 
Регистрация: 17.12.2010
Сообщений: 2
По умолчанию

Код:
{$CODEALIGN 16}

procedure Table_Loop; assembler;
asm
  db 0 db 1 db 2 db 3 db 4 db 5 db 6 db 7
  db 8 db 9 db 10 db 11 db 12 db 13 db 14 db 15
  ...
  db 240 db 241 db 242 db 243 db 244 db 245 db 246 db 247
  db 248 db 249 db 250 db 251 db 252 db 253 db 254 db 255
end;

procedure Table_Fill; assembler;
asm
    db $00 db $00 db $00 db $00 db $00 db $00 db $00 db $00 db $00 db $00 db $00 db $00 db $00 db $00 db $00 db $00
    db $01 db $01 db $01 db $01 db $01 db $01 db $01 db $01 db $01 db $01 db $01 db $01 db $01 db $01 db $01 db $01
    ...
    db $FE db $FE db $FE db $FE db $FE db $FE db $FE db $FE db $FE db $FE db $FE db $FE db $FE db $FE db $FE db $FE
    db $FF db $FF db $FF db $FF db $FF db $FF db $FF db $FF db $FF db $FF db $FF db $FF db $FF db $FF db $FF db $FF
end;


procedure GetXORArray3(x:Byte; out Ret:ByteLenArray);
asm
        AND     EAX,  $FF
        LEA     ECX,  [Table_Fill+EAX*8]
        MOVAPD  XMM2, [ECX+EAX*8]

        LEA     EAX, [Table_Loop]

        XOR     ECX, ECX
@@loop:
        MOVAPD  XMM0, XMM2

        MOVAPD  XMM1, [EAX+ECX]

        PXOR    XMM0, XMM1

        MOVUPD  [EDX+ECX], XMM0

        ADD     CL, 16
        JNZ     @@loop

        RET
end;
а так - 1300
网络孔子学院
galgal вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
вывод всех возможных значений в примечании отчета Natasha63 Microsoft Office Access 1 16.12.2012 17:23
Генерация всех возможных вариантов NanaTich Помощь студентам 6 23.05.2011 07:00
Генератор всех возможных паролей fartfart Общие вопросы Delphi 16 03.02.2011 05:24
Перебор всех возможных вариантов phenix Помощь студентам 3 03.12.2010 21:29
Перебор всех возможных вариантов [MI_nor] Общие вопросы C/C++ 9 01.04.2009 21:17