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

Тема в разделе "WASM.A&O", создана пользователем The Svin, 11 май 2006.

  1. The Svin

    The Svin New Member

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

    В eax одно из значений {0,-1,1}

    1. Сделать инъектную реализацию функциональной зависимости

    0 -> 0

    -1 -> 1

    1 -> 2



    2. Сделать обратную задачу в eax {0,1,2}(таким образом в сумме задач получаем биектное функциональное отношение)

    0 -> 0

    1 ->-1

    2 -> 1



    Безбранчевый код. Оптимизация по размеру.
     
  2. AlB80

    AlB80 New Member

    Публикаций:
    0
    Регистрация:
    11 май 2006
    Сообщения:
    25
    Адрес:
    Russia
    Первая (8 байт)

    rol eax,1

    adc eax,0

    adc eax,0



    или еще (8 байт)

    rol eax,1

    xor ebx,ebx

    adc eax,ebx

    adc eax,ebx
     
  3. AlB80

    AlB80 New Member

    Публикаций:
    0
    Регистрация:
    11 май 2006
    Сообщения:
    25
    Адрес:
    Russia
    Вторая проще (5 байт)

    shr eax,1

    sbb eax,0
     
  4. Quantum

    Quantum Паладин дзена

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

    Во втором варианте xor ebx,ebx нужно поставить перед rol, т.к. xor затирает C.
     
  5. AlB80

    AlB80 New Member

    Публикаций:
    0
    Регистрация:
    11 май 2006
    Сообщения:
    25
    Адрес:
    Russia
    Quantum

    Именно. :)

    Предполагал, что нулевой регистр найдется заранее, т.е. размер будет 6 байт. С пустым регистром вторая задача тоже уменьшается до 4 байт.
     
  6. dinoweb

    dinoweb Дмитрий

    Публикаций:
    0
    Регистрация:
    12 окт 2005
    Сообщения:
    129
    Адрес:
    Россия. Красноярск
    Первая задача. 7 байт.

    Заранее ничего не надо

    lea ebx,[eax*2]

    sar eax,1

    xor eax,ebx
     
  7. dinoweb

    dinoweb Дмитрий

    Публикаций:
    0
    Регистрация:
    12 окт 2005
    Сообщения:
    129
    Адрес:
    Россия. Красноярск
    5 байт!!

    cdq

    shr eax,1

    xor eax,edx
     
  8. The Svin

    The Svin New Member

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

    В одном отношении 1 переводится в -1 а в другом в 2.

    Так что биектности не получается. Так что задачу суммирующую условия обеих не решить. Их можно решать только по отдельности (что все и делали)

    Хорошо что успел я это заметить первым, никому психоческой

    травмы не нанёс. Прошу прощения за упоминание биектности в условиях.