Задачка о получении перестановок 4х элементов (оптимизация по размеру)

Тема в разделе "WASM.A&O", создана пользователем Black_mirror, 13 июн 2008.

  1. Black_mirror

    Black_mirror Active Member

    Публикаций:
    0
    Регистрация:
    14 окт 2002
    Сообщения:
    1.035
    Функция F получает 4 байта в регистре EAX. При этом содержимое региста EAX она не разрушает. Необходимо разместить между вызовами функции F некоторое количество инструкций, чтобы вызвать её со всем возможными перестановками байт регистра EAX. Порядок получения перестановок произвольный, к исходной перестановке возвращаться не нужно. Вызовы функции F не учитываются, считается только размер инструкций для получения перестановок.
    Код (Text):
    1. ;ABCD
    2. call F
    3. xcgh al,ah ;ABDC
    4. call F
    5. rol eax,8 ;BDCA
    6. call F
    7. xchg al,ah ;BDAC
    8. call F
    9. и так далее...
    call F писать ну нужно, в комментариях указывайте полученную после каждой инструкции перестановку. Ну и общий размер всех инструкций укажите.
     
  2. twgt

    twgt New Member

    Публикаций:
    0
    Регистрация:
    15 янв 2007
    Сообщения:
    1.494
    ;eax=ABCD
    mov ecx,3
    @@:
    push ecx
    call F
    pop ecx
    rol eax,8
    loop @B

    ?
     
  3. Black_mirror

    Black_mirror Active Member

    Публикаций:
    0
    Регистрация:
    14 окт 2002
    Сообщения:
    1.035
    twgt
    Нет, нужно получить все 24 перестановки
    ABCD ABDC ACBD ACDB ADBC ADCB
    BACD BADC BCAD BCDA BDAC BDCA
    CABD CADB CBAD CBDA CDAB CDBA
    DABC DACB DBAC DBCA DCAB DCBA
    но можно в любом порядке
     
  4. MSoft

    MSoft New Member

    Публикаций:
    0
    Регистрация:
    16 дек 2006
    Сообщения:
    2.854
    twgt
    здесь ты только их по кругу меняешь. А если надо например BACD сделать?
     
  5. twgt

    twgt New Member

    Публикаций:
    0
    Регистрация:
    15 янв 2007
    Сообщения:
    1.494
    Black_mirror,MSoft
    Да, недопонял задания.
     
  6. Proteus

    Proteus Member

    Публикаций:
    0
    Регистрация:
    19 июн 2004
    Сообщения:
    344
    Адрес:
    Russia
    Код (Text):
    1.            mov  eax,11223344h
    2.  
    3. l0: call    l2
    4.     call    l1
    5.     call    l1
    6. l1: bswap   eax
    7. l2: call    l4
    8.     call    l3
    9. l3: bswap   eax
    10.     ror     eax,8
    11. l4: call    l5
    12.     xchg    ah,al
    13. l5:        ; eax - читаем тут
     
  7. Ra_

    Ra_ New Member

    Публикаций:
    0
    Регистрация:
    4 мар 2007
    Сообщения:
    289
    Вывод: в 4-х-битной криптографии получили все варианты пермутаций :)
     
  8. Proteus

    Proteus Member

    Публикаций:
    0
    Регистрация:
    19 июн 2004
    Сообщения:
    344
    Адрес:
    Russia
    Ну вобщем да. Может даже можно сократить одну команду (получив правда менее красивый порядок).
    Сорри что ответом тянул =))