1. Assembler / Говнокод #7185

    +151

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    13. 13
    14. 14
    15. 15
    PROCEDURE StartMusic (Song : POINTER; Polling, OldIRQ : BOOLEAN); ASSEMBLER;
      ASM
        MOV  AH,0
        MOV  BL,Polling
        MOV  BH,OldIRQ
        CMP  BH,1
        JE   @Invert
        MOV  BH,1
        JMP  @GoOn
      @Invert:
        XOR  BH,BH
      @GoOn:
        LES  SI,DWORD PTR Song
        CALL _HscPlayer
      END;

    Нашел в HSC-TRACKER V1.5, файл playhsc.pas. Оригинальная инверсия булевого значения - true на false и наоборот.
    Для не знающих ассемблера:

    if (OldIRQ == 1)
    OldIRQ = 0
    else
    OldIRQ = 1;
    Реализуется куда проще:
    OldIRQ ^= 1;

    Запостил: DemonId7, 06 Июля 2011

    Комментарии (9) RSS

    • Зато есть XOR BH,BH для обнуления регистра. :D
      Ответить
      • Это я к тому, что XOR всё равно и так есть в этом раздутом коде, хотя его только и достаточно OldIRQ ^= 1;
        Ответить
        • вы ищите `XOR BH,1`?
          Ответить
          • Не ищу, скорее ожидаю что-то вроде этого. Но если б это было так - на говнокод бы не запостили.
            Ответить
          • Ищите, Шура, ищите.
            Ответить
    • Я кстати тоже накосячил. Правильнее было бы:
      OldIRQ ^= true;
      Мало ли какой компилятор попадется, во всех стандартах совпадает только значение false, а true "гуляет" по воле создателей :D
      Ответить
      • Меньше пользуйтесь говнокомпиляторами =)
        Ответить
    • А не проще ли

      OldIRQ = 1 - OldIRQ;

      А?
      Ответить
    • OldIRQ := not OldIRQ;

      И никаких проблем!
      Ответить

    Добавить комментарий