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

    +217

    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
    mov ebx, [sKey]
                                  mov ecx, 31
    
                                  l9:
                                  ;----------loop------------
                                  	fprem
    	                        shr ebx,1
                                  	jnc if9
    			.......
                                  	if9:
                                  	fmul st0,st0
                                  ;----------loop------------              
                                  loop l9

    реабилитируюсь за пост несвежего, но смешного говна немного раньше

    Запостил: 3.14159265, 07 Мая 2010

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

    • показать все, что скрытобред какой то, я тоже могу написать
      ;             u
      a       NHd[i]                     .
           12              .                          -d   ;
       jnz 22              e
      _e    .;
      --------------------------
      Ответить
      • Хаха вот же тупой 1эсник ;)
        Ответить
      • >>бред какой то

        Именно так. Вы просто феерический бред выдали.
        Ответить
    • возможно я затупил и сильно укоротил код
      суть в том что нужный и результат вычисляется там где многоточие
      а остаток и умножение - вспомогательные операции

      так думаю будет четко ясно где говнокод

      если и так никому не будет ясно.
      напишу в чем именно затуп
      Ответить
    • Непонятно, но интересна. Напишите, в чем затуп.
      Ответить
    • я просто запостил первый серъезный попавшийся под руку
      говнокод из проекта в ответ на упрек в №3177

      судя по активности там и здесь - детские говно коды интереснее и смешнее, поскольку они понятные
      напишу чуток позже в развернутом виде
      Ответить
      • Да не, просто асмовый говнокод обычно подразумевает какое-то неправильное применение чисто асмовых приколов. А тут лажа, выходит, в алгоритме.
        Ответить
    • /me делает вид, что в x86 не шарит, ибо ARM-хеккер.
      Ответить
    • спросите усруса
      Ответить
      • да-да, он шарит в асме)
        Ответить
      • Уссусь реально засветился. Этож нужно было так лажануться. :D
        Ответить
        • Урсус охеренно лажанулся. Просто эпично. Так, кроме него, никто не может. Я его аж зауважал.
          Ответить
    • я не буду фейлить и съезжать как usrus

      итак
      ebx сдвигается влево на 1, когда он станет 0 можно выйти из цикла
      чтобы не выполнять крайне ресуркоемкие нахождения остатков и умножения

      + как я написал выше основной код там где многоточие
      то есть выходить из цикла можно смело как только ebx=0
      и заменять луп на что-то вроде
      cmp ebx,0
      jnz l9

      такие как написавший первый пост скажут 2 операции - херня
      но ускорение в 1.25-1.5 раза того стоит

      в принципе даже и втаком как я запостил виде - это говно

      допустим ebx=1 при таком коде выполнится 31 итерация умножения и 31 итерация деления
      если же проверять ebx на 0 из цикла можно выйти досрочно на первой же итерации

      потом возвести st0 в нужную степень и поделить на st1 в нужной степени и найти остаток
      таким образом экономим кучу на умножении и делении (которые весьма емкие)

      даже бы если б на месте делений стояли другие операции мы могли бы выйти из цикла
      и зайти в другой цикл без условия, что также было бы быстрее

      я там еще думал как избавится от бранчинга conditional movами,
      но оно того по замерам скорости того не стоило потому заменил многоточиями, дабы не отвлекать читателя
      Ответить
      • Ну ты сильнно рано раскрыл карты. Мы ведь надеелись задетектить второго уссуся.
        Ответить
      • >2 операции - херня но ускорение в 1.25-1.5 раза того стоит
        У вас мышление С++ ника, беающего за копеечкой.
        Ответить
        • Минус балл тебе за копеечку от обладателя 600го селерона.
          Ответить
        • Минус второй балл от Сишника, обладающего Celeron 900MHz
          Ответить
        • Минус третий балл от бывшего счастливого обладателя селерона 1ГГц.
          Ответить
        • Плюс первый балл от нелюбителя с++, обладающего intel core quad
          Ответить
          • минус балл от меня.
            Ответить
          • Да, твой член проц побольше будет.
            Ответить
          • Обладатель такого компьютера и любит программировать на Си?
            Вы особенный. Очень хотел бы увидеть ваш код (не говнокод) на Си из реального проекта.
            Возможно, я полностью поменяю мнение об этом языке, хотя и так его уважаю.
            Возможно пойму, что я просто говнокодер, и язык в этом не виноват.
            Очень прошу привести пример. =)
            Ответить
            • Смотри в 3151. Там был лисапед для ООП.
              Ответить
              • Этот велосипед я видел, но может быть им человек и не пользуется, а просто привёл, как возможность. Я бы посмотрел бы и на другой код.
                И я бы взглянул на его использование, да и не такой уж велосипед. В Си ведь этого нет.
                Ответить
                • ООП-костыль для Си это новое веяние? Не смешите.
                  Первая же ссылка раскрывает копипастера
                  http://ldeniau.home.cern.ch/ldeniau/html/oopc/oopc.html
                  Ответить
                  • >это новое веяние
                    Покрайней мере для меня.
                    По мне, конечно, лучше использовать транслятор какого-нибудь языка в Си, если встроенное устройство ничего, кроме Си неподдерживает, чем костыли.
                    Всё-же писать нужно будет меньше.
                    Ответить
                    • >> если встроенное устройство ничего, кроме Си неподдерживает

                      Что-что??
                      facepalm.c
                      Ответить
                      • Хорошо: Машинные коды, Ассемблер, Си (он уже написан фирмой производителем устройства/микроконтроллёра, а самому другой язык писать некогда).
                        Ответить
                        • >>он уже написан фирмой производителем

                          Язык написан? Да нет, его спеки написали другие люди. А вот компилятор уже ближе к истине.

                          >>а самому другой язык писать некогда

                          Тоже самое. Язык в смысле описать грамматику/семантику или же написать компилятор? Вещи принципиально разные.
                          Ответить
                          • Да. Тоже программист. Тоже нужно учится формулировать мысли. :)
                            Ответить
                            • Програмишь, не умея формулировать мысли? Как это вообще возможно-то? На PHP чтоли?
                              Программист - это почти лингвист: лексика, семантика, контекстные условия - даже термины те же.
                              Ответить
          • Эээ ты чё, только я в твои фанаты заделался, когда ты на препроцессоре блекджек со шлюзами реализовал, а ты меня тут разочаровать решил.
            Ответить
        • Плюс бал от меня. Обладатель Celeron 900MHz.
          Противник преждевременной оптимизации того, что в этом не нуждается.
          Ответить
          • Откуда ты знаешь, что тут нуждается в оптимизации, а что - нет? Может, это как раз код из узкого места какого-то научного расчёта, и от реализации этого места зависит то, будет расчёт делаться месяц или полтора месяца?
            Ответить
            • Видимо автор бы написал, что это мега узкое горлышко в проекте, если что, но я такого не вижу.
              Ответить
              • Автор много чего не написал.
                И вообще,
                http://groups.google.com/group/sellme-dev/msg/cbbc6c83649aaf56
                Ответить
                • Вам нужно ещё раз перечитать эту строчку из своего же манула:
                  >Естественно, оптимизация должна быть разумной.
                  Ответить
                • Я не противник оптимизации. Я считаю это полезным. Но считать инструкции - можно только для некоторых немногих задач, иначе это параноя.
                  Ответить
                  • Ну дык это и есть "некоторая немногая задача", для которой оптимизация нужна. Иначе схрена ли её на асме писать?
                    Ответить
                    • Вам, паскалистам, откуда знать, что надо писать на ассемблере, а что нет?
                      Ответить
                      • Забавный вопрос от такого ника.
                        Ответить
                        • Это вопрос от человека, а не от ника.

                          >Иначе схрена ли её на асме писать?
                          Ты знаешь, когда я только учился, то я писал на ассемблере даже просто так. Просто так посреди проги делал ассемблерную вставку, например что-бы инкрементировать значение. Сейчас даже самому смешно. Оптимизация, ухудшающая оптимизацию. :D
                          Ответить
      • >ebx сдвигается влево на 1,

        как это влево??
        в коде четко прописано shR ebx,1 !
        Ответить
        • да тупанул, торопился перед праздниками
          гость прав, биты анализируются с младших
          Ответить
      • Ну, во-первых если сначала возвести число в 32 степень, а потом взять остаток, то точность будет хуже, чем 32 раза умножать и брать остаток.

        А тогда получается, что от 32 умножений не избавиться. Если "основной код" не зависит от промежуточных результатов этих умножений (а это из кода неясно), то да, можно сделать два цикла. Будет ли это быстрее, не знаю. Если Key большое, то врядли.
        Ответить
        • >а это из кода неясно
          Афтар, требуем больше кода.
          Ответить
        • >>>если сначала возвести число в 32 степень, а потом взять остаток, то точность будет хуже

          согласен, ради точности это все и писалось

          >>Будет ли это быстрее, не знаю. Если Key большое, то врядли.
          key большое, но выигрыш в скорости есть всегда, поскольку всегда есть вероятность экономии пары итераций
          + ecx можно задействовать для других целей
          Ответить
          • Два цикла - это два раза крутить счётчик.
            Так что выигрыш от объединения циклов перевесит проигрыш от пары итераций.
            Ответить
      • Не "cmp ebx, 0", а "test ebx, ebx", раз уж так скорости хочется.
        Ответить

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