Сложение длинных чисел

Тема в разделе "WASM.A&O", создана пользователем Raul, 17 ноя 2005.

  1. Raul

    Raul New Member

    Публикаций:
    0
    Регистрация:
    17 ноя 2005
    Сообщения:
    1
    Адрес:
    Russia
    Здравствуйте!



    Вот вполне стандартный фрагмент кода для сложения длинных целых чисел в дополнительном коде (занимающих не одно слово, а массив слов):
    Код (Text):
    1.  
    2. mov       edi,dword ptr [edx+4]         // // edi = p2 [1];
    3. mov       eax,dword ptr [ecx+4]         // // eax = p1 [1];
    4. adc       eax,edi                       // cf,eax = p1 [1] + p2 [1]+cf;
    5. mov       dword ptr [ecx+4],eax         // p1 [1] = eax;
    6.  
    7. mov       edi,dword ptr [edx+8]         // // edi = p2 [2];
    8. mov       eax,dword ptr [ecx+8]         // // eax = p1 [2];
    9. adc       eax,edi                       // cf,eax = p1 [2] + p2 [2]+cf;
    10. mov       dword ptr [ecx+8],eax         // p1 [2] = eax;
    11.  
    12. ...
    Померено, что на любом Athlon-е от Thunderbird-а до 64-го каждый блок из четырех команд выполняется за 2 такта, на Pentium 3 - за 4 такта, а на Pentium 4 Northwood - за 8 тактов :dntknw:.



    Может ли кто подсказать - как переписать код для того, чтобы он быстро выполнялся на пне?

    Регистр ebx занят под счетчик цикла, esi свободен.
     
  2. IceStudent

    IceStudent Active Member

    Публикаций:
    0
    Регистрация:
    2 окт 2003
    Сообщения:
    4.300
    Адрес:
    Ukraine