Asm coding tricks

Discussion in 'WASM.A&O' started by S_T_A_S_, Jan 1, 2005.

  1. KeSqueer

    KeSqueer Сергей

    Blog Posts:
    0
    Joined:
    Jul 19, 2007
    Messages:
    1,183
    Location:
    Москва
    baldr
    Просто поправил edemko на счет максимального количества комбинаций.
     
  2. Mikl___

    Mikl___ Супермодератор Staff Member

    Blog Posts:
    14
    Joined:
    Jun 25, 2008
    Messages:
    3,914
    еще забыли о:
    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

    Blog Posts:
    0
    Joined:
    Oct 14, 2002
    Messages:
    1,035
    16 переходов получается очень легко - SAHF
    но OF опять оказался не у дел
     
  4. baldr

    baldr New Member

    Blog Posts:
    0
    Joined:
    Apr 29, 2010
    Messages:
    327
    Если ветки, обрабатывающие конкретные значения, небольшие по размеру, а значения идут подряд, я (в компактном коде) использую следующее:
    Code (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: