1. Если вы только начинаете программировать на ассемблере и не знаете с чего начать, тогда попробуйте среду разработки ASM Visual IDE
    (c) на правах рекламы
    Скрыть объявление

Задачка о длине числа

Тема в разделе "WASM.A&O", создана пользователем murder, 27 мар 2010.

  1. PowerASM

    PowerASM New Member

    Публикаций:
    0
    Регистрация:
    27 мар 2010
    Сообщения:
    59
    edemko
    С использованием команд сопроцессора это будет кротчайшим, но не самым быстрым вариантом. Судя по всему здесь ищут наибыстрейший вариант.
    P.S. Спасибо, что напомнили про fisttp. Не часто ей приходится пользоваться. Я и забыл про нее совсем
     
  2. edemko

    edemko New Member

    Публикаций:
    0
    Регистрация:
    25 ноя 2009
    Сообщения:
    456
    Исходя из недавно-выложенного документа от murder, fyl2x занимает ~126 тиков и на log2(0) тоже тупит.

    http://wasm.ru/forum/viewtopic.php?id=36421
     
  3. valterg

    valterg Active Member

    Публикаций:
    0
    Регистрация:
    19 авг 2004
    Сообщения:
    2.105
    А варианта с умножением на 0.1 не было? Через SSE можно 4 числа умножить за такт.
     
  4. murder

    murder Member

    Публикаций:
    0
    Регистрация:
    3 июн 2007
    Сообщения:
    616
    valterg
    Была попытка с фиксированой точкой.
     
  5. Maratyszcza

    Maratyszcza New Member

    Публикаций:
    0
    Регистрация:
    29 сен 2006
    Сообщения:
    32
    murder
    Для кода из поста #13 нужно добавить mov ecx, eax. Иначе ты сравниваешь throughput код #13 с latency кода #33
     
  6. murder

    murder Member

    Публикаций:
    0
    Регистрация:
    3 июн 2007
    Сообщения:
    616
    Всё так и сделано. Посмотри код из #47.
     
  7. edemko

    edemko New Member

    Публикаций:
    0
    Регистрация:
    25 ноя 2009
    Сообщения:
    456
    Код (Text):
    1. ;/*
    2. ;  ebx:eax -> integer
    3. ;  ecx     <- trunc(log(10;integer))+1
    4. ;  flags   <- ?
    5. ;*/
    6. proc cdd64;CountDecimalDigits64
    7.         bsr     ecx,ebx
    8.         jz      @f
    9.         add     ecx,32
    10. .fyl2x: imul    ecx,0010011010001000b
    11.         shr     ecx,15
    12.         inc     ecx
    13.         ret     0
    14. @@:     bsr     ecx,eax
    15.         jnz     .fyl2x
    16.         lea     ecx,[eax+1]
    17.         ret     0
    18. endp