1. C# / Говнокод #22289

    −38

    1. 1
    2. 2
    3. 3
    4. 4
    LABEL:
    	action();
    	i++;
    if(i < count) goto LABEL;

    Запостил: dm_fomenok, 06 Февраля 2017

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

    • может у него w и f на клавиатуре не работают
      Ответить
    • руки отрубить. по колено.
      Ответить
      • Предлагаете карать за колдунство?
        Ответить
      • случай когда излишество вредит: отрубать руки по колено это то же самое что отрубать ноги по колено. говнокодеры без ног все еще могут говнокодить!
        Ответить
    • код как код, чего вы тут возмущаетесь...
      LABEL:
        call  Action
        inc   eax
        cmp   eax, ecx
        jl    LABEL
      Ответить
      • Сократить же можно:
        LABEL:
          call Action
          loop LABEL

        Инструкция loop сразу делает dec ecx и jecxnz LABEL.
        Ответить
        • где ты там в ГК "dec ecx" нашел? :-)
          Ответить
          • I не юзается, можно цикл перевернуть.
            Ответить
          • А, ну да, со встроенным инкрементом инструкции нет. Анскиллябры, разрабатывавшие x86, почему-то предусмотрели только обратный отсчёт.
            Ответить
            • к слову. вопрос из детских времен который так и остался без ответа (потому что после руки тогда не дошли; курсы асма уже закончил) - а будет ли rep с call работать?
              Ответить
              • Увы, rep только для строковых команд (типа movsb/movsw/movsd/movsq). С нестроковыми игнорируется. А жаль...
                Ответить
                • А если написать свой компилятор с преферансом и куртизанками?
                  Ответить
                  • А это уже будет не совсем ассемблер, потому что у процессоров Intel x86 нет префикса повтора, который бы действовал на все инструкции.

                    Если нам просто нужна такая языковая конструкция для сокращения исходника, то многие ассемблеры поддерживают макросы. Например, для MASM описание макроса будет выглядеть так:
                    rep_call MACRO @act, @lbl
                        @lbl:
                        call @act
                        loop @lbl
                    rep_call ENDM


                    И в месте вызова будет так:
                    rep_call Action, LABEL


                    Не ручаюсь за точность, потому что сам макросы для MASM не писал.

                    P.S. Только что дошло, что хочется это название прочитать как «рэп кал».
                    Ответить

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