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

    +143

    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
    16. 16
    17. 17
    18. 18
    19. 19
    20. 20
    21. 21
    22. 22
    23. 23
    24. 24
    25. 25
    26. 26
    27. 27
    28. 28
    29. 29
    30. 30
    31. 31
    32. 32
    33. 33
    34. 34
    35. 35
    36. 36
    37. 37
    38. 38
    39. 39
    40. 40
    41. 41
    42. 42
    43. 43
    44. 44
    45. 45
    46. 46
    47. 47
    48. 48
    49. 49
    50. 50
    51. 51
    52. 52
    53. 53
    54. 54
    55. 55
    56. 56
    57. 57
    58. 58
    59. 59
    60. 60
    61. 61
    62. 62
    63. 63
    64. 64
    65. 65
    66. 66
    67. 67
    68. 68
    69. 69
    70. 70
    71. 71
    72. 72
    cmp bl,1
    	je France_jmp
    	cmp ax,380
    	je Bulgaria_jmp
    	cmp ax,383
    	je Slavonia_jmp
    	cmp ax,385
    	je Croatia_jmp
    	mov bx,400
    	mov dx,440
    	call IfAnd
    	cmp bl,1
    	je Germany_jmp
    	jmp next_s
    USA_jmp: jmp USA
    Grinford_jmp: jmp Grinford
    France_jmp: jmp France
    Bulgaria_jmp: jmp Bulgaria
    Slavonia_jmp: jmp Slavonia
    Croatia_jmp: jmp Croatia
    Germany_jmp: jmp Germany
    
    	next_s:
    	mov bx,450
    	mov dx,459
    	call IfAnd
    	cmp bl,1
    	je Japan_jmp
    	mov bx,460
    	mov dx,469
    	call IfAnd
    	cmp bl,1
    	je Russia_jmp
    	cmp ax,471
    	je Taiwan_jmp
    	cmp ax,474
    	je Estonia_jmp
    	cmp ax,475
    	je Litvia_jmp
    	cmp ax,477
    	jmp next_ss
    
    Japan_jmp: jmp Japan
    Russia_jmp: jmp Russia
    Taiwan_jmp: jmp Taiwan
    Estonia_jmp: jmp Estonia
    Litvia_jmp: jmp Latvia
    Lithuania_jmp: jmp Lithuania
    Philippines_jmp: jmp Philippines
    Ukraine_jmp: jmp Ukraine
    Moldova_jmp: jmp Moldova
    Hongkong_jmp: jmp Hongkong
    Britain_jmp: jmp Britain
    Greece_jmp: jmp Greece
    Cyprus_jmp: jmp Cyprus
    Macedonia_jmp: jmp Macedonia
    Malta_jmp: jmp Malta
    Ireland_jmp: jmp Ireland
    Belgium_jmp: jmp Belgium
    Portugal_jmp: jmp Portugal
    Iceland_jmp: jmp Iceland
    Denmark_jmp: jmp Denmark
    next_ss:
    	je Lithuania_jmp
    	cmp ax,480
    	je Philippines_jmp
    	cmp ax,482
    	je Ukraine_jmp
    	cmp ax,484
    	je Moldova_jmp
    	cmp ax,489
    	je Hongkong_jmp

    Прога для проверки правильности штрих-кодов по контрольной сумме и определение страны-производителя. Про таблицы перехода и near-адресацию конечно в те времена еще не догадывался, только начинал учить асм.
    PS: А интерфейс у нее ничего такой был для ассемблера, правда слизал с NU: http://habrastorage.org/storage1/e4efe022/903c7848/d99f7f4f/33d1ed16.png

    Запостил: Tronix, 01 Июля 2011

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

    • Игначально на ассме написанно? Или это дизасм с отладочной информацией, если написано на языке высокого уровня то компилеры часто создают двойной прыжок jx/jmp
      Ответить
    • тоже не говно
      Ответить
      • Схуяли?
        Ответить
        • Патамушто афтор матюган с семками.

          Я достаточно близко приблизился к вашему уровню языка, чтобы Вам было понятно?
          Ответить
          • А мы не с вами беседуем. Я лишь хотел узнать, почему LegionDeath считает это нормальным кодом?
            Ответить
          • "Чтобы понять рекурсию, сперва нужно понять рекурсию." (c) Tronix
            Ответить
            • Ну скопипастили вы мою подпись с одного форума, и что? Что вы этим конкретно хотите сказать? Или сморозили херню и теперь не знаете, что сказать? Тогда так просто и скажите - пришли в этот тред просто пофлудить, ассемблера не знаете.
              Ответить
    • Зачетный код :D
      Наглядный пример неправильного выбора инструмента. Надо было брать тасм и навсегда забыть о jump out of range, поскольку он сам, где надо, сгенерирует связку Jx/JMP. Либо можно было воспользоваться макросами, они как раз идеально подходят для таких случаев.
      Ответить
      • TASM? Да он мертв давно - МАСМ рулит, FASM - подруливает.
        Ответить
        • Давно - это как? В прошлом году вышел версии 5.4, от Embarcadero Technologies. Изменений практически ноль, но говорить о его смерти малость опрометчиво. Да и какие добавления нужны? Он по прежнему единственный, кто умеет заменять умножение на сдвиги и сложения, единственный кто может подменять команды старших процессоров на комбинации команд младших процессоров, кто умеет...да дохрена чего умеет.
          И эта, мой камент был к коду, который явно писался в те времена, когда фасма не было даже в планах, а тасм полностью эмулировал масм, плюс имел свои примочки.
          Ответить
          • Мы об одном ТАСМе говорим? Я имел виду тасм от borland... Хотя масм мой любимец не за это, он позволяет создавать .lib файлы совместимые с visual studio C++, при наличии определенных знаний формата вызова можно впиливать в свой проект шустрый и компактный ассемблерный код, FASM (под винду), правда тож не плох, но генерит только обьектники.
            Ответить
            • Об одном, о нем самом. Появился в RAD Studio 2010, точнее в пакете С++.
              По lib-файлам не вижу особых проблем. Есть утилитки coff2omf и omf2coff, вполне рабочие. Но, судя по хэлпам, в вижене эти утилиты не нужны, поскольку link.exe прекрасно понимает формат omf и может самостоятельно сконвертировать его в родной coff.
              Ответить
              • > Появился в RAD Studio 2010
                он никуда не девался

                другое дело, что застрять в С++ Быдлере в 2010 году - символично
                Ответить
                • Читать умеем? Речь о новой версии ТАСМ, вышедшего в 2010-м году.
                  Ответить
                  • киса, RAD Studio 2010 вышла в 2009

                    > Изменений практически ноль
                    > Речь о новой версии
                    мне кажется или кое-кто хуйню пишет?
                    Ответить
                    • Перекрестись, казаться больше не будет.
                      В копирайте указан 2010-й год и новая версия - 5.4. Что не так? Или тебе известны изменения, что появились с версии 5.3? Ну так колись, а не выёбывайся.
                      Ответить
                      • > Ну так колись, а не выёбывайся
                        Нифига себе какие нубы наглые пошли...
                        Ответить
                        • Ты забыл добавить эхотажную "lamers must die", чтоб каждому стало ясно насколько ты крут :-D
                          Ответить
                • btw, щаз 2011 год
                  Ответить
            • >visual studio C++, при наличии определенных знаний формата вызова можно впиливать в свой проект шустрый и компактный ассемблерный код
              Дрочите на комманды процессора и такты?
              Ответить
              • >>Дрочите на комманды процессора и такты?

                Не дрочу, а чинно мастурбирую, а если серьезно - прикалывает размеры и быстрота кода.
                Ответить
                • >а мастурбирую
                  Это плохо. Вставать на девушек не будет. Только на такты CPU.
                  Ответить
          • показать все, что скрытоvanished
            Ответить
          • > заменять умножение сдвигами
            > подменять команды старших процессоров
            Зачем!?
            Ответить
            • > заменять умножение сдвигами
              Чтоб быстрее работало
              > подменять команды старших процессоров
              Чтоб скомпилировать под старые процессоры без новых инструкций, не переписывая руками новые инструкции в старые. Чтоб не писать два раза код под новые и старые процессоры.
              Ответить
              • Ответить
              • > быстрее работало
                Я думаю, что чувак, который пишет на асме, и сам до этого додумается...

                Да и прокладки на джампах тоже сомнительная хуйня, которая может сломать код.
                Ответить
              • > без новых инструкций
                Хм, т.е. я смогу переключение в лонг мод сконпелировать под 8086? И юзать там 64-битные регистры? Охуенно же, пойду ставить тасм.
                Ответить
        • - Здравствуйте, полуось уже умерла?
          - Как, опять?
          Ответить
    • >je Croatia_jmp

      Kosovo je Srbija
      Ответить
    • > Litvia_jmp: jmp Latvia
      обидели соседей очепяткой
      Ответить
    • показать все, что скрытоvanished
      Ответить

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