Asm coding tricks

Тема в разделе "WASM.A&O", создана пользователем S_T_A_S_, 1 янв 2005.

  1. KeSqueer

    KeSqueer Сергей

    Публикаций:
    0
    Регистрация:
    19 июл 2007
    Сообщения:
    1.183
    Адрес:
    Москва
    baldr
    Просто поправил edemko на счет максимального количества комбинаций.
     
  2. Mikl___

    Mikl___ Супермодератор Команда форума

    Публикаций:
    14
    Регистрация:
    25 июн 2008
    Сообщения:
    3.708
    еще забыли о:
    JG(JNLE) ZF = 0 и SF=OF
    JGE(JNL) SF = OF
    JL(JNGE) SF <> OF
    JNG(JLE) ZF=1 или SF<>OF
    JA(JNBE) CF = 0 и ZF = 0
    JBE CF = 1 или ZF=1
    JNA CF = 1 и ZF = 1
     
  3. Black_mirror

    Black_mirror Active Member

    Публикаций:
    0
    Регистрация:
    14 окт 2002
    Сообщения:
    1.035
    16 переходов получается очень легко - SAHF
    но OF опять оказался не у дел
     
  4. baldr

    baldr New Member

    Публикаций:
    0
    Регистрация:
    29 апр 2010
    Сообщения:
    327
    Если ветки, обрабатывающие конкретные значения, небольшие по размеру, а значения идут подряд, я (в компактном коде) использую следующее:
    Код (Text):
    1.         loop    @f
    2. ; cx was 1, now it's 0
    3.         mov     ax, 1
    4.         jmp     done
    5. @@:     loop    @f
    6. ; cx was 2, now it's 0
    7.         mov     ax, 2
    8.         jmp     done
    9. @@:     loop    @f
    10. ; cx was 3, now it's 0
    11.         mov     ax, 3
    12.         jmp     done
    13. @@:
    14. ; cx was 0 or 4+, now it's 3 less
    15.         mov     ax, 4
    16. done:
    Если известно значение ZF по итогу исполнения веток, можно сэкономить jmp done используя loopz/loopnz.

    ----8<----
    Black_mirror,

    Используя sahf, shr и shl, можно хоть все 256 вариантов поймать. Другое дело что извращение получится конкретное. :derisive: