Мелкие задачки для крупных мозгов 1

Тема в разделе "WASM.ZEN", создана пользователем The Svin, 4 мар 2005.

  1. The Svin

    The Svin New Member

    Публикаций:
    0
    Регистрация:
    6 июл 2003
    Сообщения:
    665
    Адрес:
    Russia
    Поместить в регистр (количество крайних нулей)-1

    Иначе говоря реализовать функцию

    (в бинарном представлении)

    0x...0 -> 1

    1x...0 -> 0

    0x...1 -> 0

    1x...1 ->-1

    Линейно индексное решение не приветсвуется.

    Лучше решения которые используют один (этот же самый) регистр.
     
  2. _BC_

    _BC_ БЦ

    Публикаций:
    0
    Регистрация:
    20 янв 2005
    Сообщения:
    759
    Как я понял, речь идет про биты 31 и 0. Вход - eax, выход - al.



    sar eax, 1

    salc

    not al

    js l1

    inc al

    l1: inc al
     
  3. Black_mirror

    Black_mirror Active Member

    Публикаций:
    0
    Регистрация:
    14 окт 2002
    Сообщения:
    1.035
    Решил немного не ту задачу:

    этот код считает суммарное число нулевых разрядов слева и справа.

    103A00F0h -> 3+4-1=6


    Код (Text):
    1.   shr eax,1
    2. .l:
    3.   adc eax,eax
    4.   test eax,eax
    5.   jg .l
    6.   bsf eax,eax
    7.   jnz .l1
    8.   mov eax,32
    9. .l1:
    10.   dec eax
     
  4. BLOb

    BLOb New Member

    Публикаций:
    0
    Регистрация:
    20 апр 2004
    Сообщения:
    9
    Адрес:
    Russia
    Код (Text):
    1.  
    2.   sar   eax, 1
    3.   setns al
    4.   sbb   al, 0
    5.  


    Вход - eax, выход - al
     
  5. _BC_

    _BC_ БЦ

    Публикаций:
    0
    Регистрация:
    20 янв 2005
    Сообщения:
    759
    BLOb



    XXXXXXXXXXXXX
     
  6. The Svin

    The Svin New Member

    Публикаций:
    0
    Регистрация:
    6 июл 2003
    Сообщения:
    665
    Адрес:
    Russia
    BLOb

    Прийдётся ещё одну инструкцию добавить (типа movxs eax,al)

    Выход должен быть в тот же регистр.



    Всем кто отозвался, спасибо. Читаю с интересом ваши идеи.
     
  7. _BC_

    _BC_ БЦ

    Публикаций:
    0
    Регистрация:
    20 янв 2005
    Сообщения:
    759
    вот это я обоср#лся. SALC FF возвращает, а не 1.
    Код (Text):
    1.  
    2.     sar  eax, 1
    3.     salc
    4.     js   $+3
    5.     inc  al




    Я выиграл ! ;)
     
  8. S_T_A_S_

    S_T_A_S_ New Member

    Публикаций:
    0
    Регистрация:
    27 окт 2003
    Сообщения:
    1.754
    Код (Text):
    1. D1C0          rol     eax, 1
    2. 83E0 03       and     eax, 3
    3. 48            dec     eax
    4. D1F8          sar     eax, 1
    5. F7D8          neg     eax
     
  9. S_T_A_S_

    S_T_A_S_ New Member

    Публикаций:
    0
    Регистрация:
    27 окт 2003
    Сообщения:
    1.754
    The Svin



    У меня тут вопрос возник: что такое линейно индексное решение?

    Это случайно не то, что у меня ? =)
     
  10. The Svin

    The Svin New Member

    Публикаций:
    0
    Регистрация:
    6 июл 2003
    Сообщения:
    665
    Адрес:
    Russia
    Нет :) Это когда ты находишь формулу которая переводит входные значения в упорядоченные индексы по которым потом происходит look up по таблице. Линейные - потому что адреса в массивах упорядоченных однотипных данных описываются линейными уравнениями типа база+индекс*размер,

    тоже что и y=a+х*b где b - угловой коэффициент в линейных уравнениях, ну а в адресации это понятно размер элемента.
     
  11. S_T_A_S_

    S_T_A_S_ New Member

    Публикаций:
    0
    Регистрация:
    27 окт 2003
    Сообщения:
    1.754
    Ага, это будет так:
    Код (Text):
    1.         rol     eax, 1
    2.         and     eax, 3
    3.         movsx   eax, byte[lockutable+eax]
    4.  
    5. lockutable  db 1, 0, 0, -1
     
  12. BLOb

    BLOb New Member

    Публикаций:
    0
    Регистрация:
    20 апр 2004
    Сообщения:
    9
    Адрес:
    Russia
    С использованием EDX:
    Код (Text):
    1.  
    2.  
    3. 99      cdq
    4. D1F8    sar  eax, 1
    5. 92      xchg eax, edx
    6. 7201    jc   @1
    7. 40      inc  eax
    8.      @1:
    9.  
     
  13. Hunter

    Hunter New Member

    Публикаций:
    0
    Регистрация:
    21 фев 2005
    Сообщения:
    47
    The Svin, а когда ты выложишь свои варианты решения этих задачек ? Возможно твои идеи подогреют "большие мозги" для новых решений. Я с большим интересом наблюдаю за происходящим, когда же будут названы победители ? :))
     
  14. The Svin

    The Svin New Member

    Публикаций:
    0
    Регистрация:
    6 июл 2003
    Сообщения:
    665
    Адрес:
    Russia


    Точно.
     
  15. The Svin

    The Svin New Member

    Публикаций:
    0
    Регистрация:
    6 июл 2003
    Сообщения:
    665
    Адрес:
    Russia


    Э... Ну это мне меньше всего хочется.

    Тут такое дело - есть общий алгоритм как задача решается и его машинная "доводка". Вот когда какое нибудь общее решение эффективно на уровне "по башке лопатой НА!.." то даже творчески сильные люди несколько сникают и переключаются на поиск победы "доводкой" а это уже резко менее интересно.

    Ну я вроде бы где-то выложил решения (не "доведённые") просто чтобы показать новое направление. Чего-то продолжения мысли не увидел, непонятно видимо?

    Для подсчёта строк из "Кольца и стрелы" можно было применить (один лишь из вариантов) снятие (обнуление) младшей единично (x | (x-1))&((x | (x-1)+1)

    lea y,[x-1]

    or x,y

    lea y,[x+1]

    and x,y



    x | (x-1) - распространяет младший единичный вправо (заполнение ПМЕ)

    x & (x+1) обнуляет ПМН (термины КИС)
     
  16. Hunter

    Hunter New Member

    Публикаций:
    0
    Регистрация:
    21 фев 2005
    Сообщения:
    47
    The Svin, ты так часто упоминаешь "Кольца и стрелы", что уже стало очень интересно почитать, с целью самообразования :)). Если до книги еще далеко, может выложишь хотя бы статейку с имеющимися наработками ?
     
  17. Hunter

    Hunter New Member

    Публикаций:
    0
    Регистрация:
    21 фев 2005
    Сообщения:
    47
    The Svin, я понял, т.е. ты не хочешь выкладывать свои варинты, чтобы у людей был стимул придумывать что-то новое, свое. И ты надеешся, что существует вероятность того, что кто-то выдвинет неожиданную и очень хорошую идею, которая может превзойти твои варианты ? Так ? :)) Просто я говорил про те задачки, обсуждение которых уже вроде бы закончилось. Народ выдвинул много своих вариантов решения, и все, больше новых идей не наблюдается. Темы почти закрыты. Когда я спросил, будешь ли ты выкладывать свои варианты, я имел ввиду, что это может "освежить" обсуждение, подогреть появление новых идей. Вполне логично, ты так не считаешь ?
     
  18. _Explorer

    _Explorer New Member

    Публикаций:
    0
    Регистрация:
    17 мар 2005
    Сообщения:
    7
    The Svin, действительно, выложил бы хоть некоторые наброски от "Кольца и стрелы", в образовательных целях для дзенствующих :))