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

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

  1. leo

    leo Active Member

    Публикаций:
    0
    Регистрация:
    4 авг 2004
    Сообщения:
    2.542
    Адрес:
    Russia
    bogrus, ты что-то напутал

    Вся изюминка в dec eax. Если декремент убрать, то нужны лишние навороты для обработки x = 2<sup>2k</sup>.

    И чего-то я вообще не понял смысла mov ecx,1 если затем идет or cl,1.
     
  2. bogrus

    bogrus Active Member

    Публикаций:
    0
    Регистрация:
    24 окт 2003
    Сообщения:
    1.338
    Адрес:
    ukraine
    leo




    Это точно, не задачка, а сплошные подводные камни :)







    Это чтобы из 0 получить 4, но все-равно к черту т.к. тогда летят уже округленные числа и все числа от 40000000h до -1 сводятся к 1, а не 4
     
  3. BLOb

    BLOb New Member

    Публикаций:
    0
    Регистрация:
    20 апр 2004
    Сообщения:
    9
    Адрес:
    Russia
    Тривиальное решение, зато короткое (EAX вход, EDX выход)
    Код (Text):
    1.  
    2.  
    3. 31 D2   xor  edx, edx
    4. 42      inc  edx
    5. @loop:
    6. 01 D2   add  edx, edx ;lea edx, [edx*4]
    7. 01 D2   add  edx, edx ;
    8. 39 C2   cmp  edx, eax
    9. 72 F8   jb   @loop
    10.  
     
  4. _BC_

    _BC_ БЦ

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

    Это нечестно. Ты смухлевал. ;)

    Щас тебя закидают камнями любители скорости. :)
     
  5. _BC_

    _BC_ БЦ

    Публикаций:
    0
    Регистрация:
    20 янв 2005
    Сообщения:
    759
    (copy deleted)
     
  6. bogrus

    bogrus Active Member

    Публикаций:
    0
    Регистрация:
    24 окт 2003
    Сообщения:
    1.338
    Адрес:
    ukraine
    BLOb 40000001h зацикл :), я уже собрал некоторые числа, на которых стоит ловить подводные камни :)
    Код (Text):
    1. 0
    2. 1
    3. 4
    4. 25555555h
    5. 40000000h
    6. 40000001h
    7. 55555555h
    8. 80000001h
    9. -1
     
  7. bogrus

    bogrus Active Member

    Публикаций:
    0
    Регистрация:
    24 окт 2003
    Сообщения:
    1.338
    Адрес:
    ukraine
    Если бы найти хороший способ реверса бит, то выделить младший единичный бит просто, а вот старшие ...
    Код (Text):
    1. mov  ecx,eax
    2. neg  eax
    3. and  eax,ecx