Можно ли теоретически написать программу на одних спаренных командах?

Тема в разделе "WASM.ASSEMBLER", создана пользователем Morskoivolk, 6 апр 2007.

  1. Morskoivolk

    Morskoivolk New Member

    Публикаций:
    0
    Регистрация:
    30 янв 2007
    Сообщения:
    85
    читал тут на досуге про спаривание команд, и подумал, а можно ли сделать так чтобы код программы состоял в основном из спаривающихся команд? типа mov,push reg, pop reg, lea, nop, inc, dec и еже с ними. ведь на ассме чаще всего используются эти команды, т.е. потенциально уже заложена такая возможность получается...
     
  2. TermoSINteZ

    TermoSINteZ Синоби даоса Команда форума

    Публикаций:
    2
    Регистрация:
    11 июн 2004
    Сообщения:
    3.552
    Адрес:
    Russia
    Morskoivolk
    У меня был курсач на тему одну... там я придумывал следующее :
    Код (Text):
    1. CryptoString:
    2. call _delta
    3. _delta:
    4. pop eax
    5. sub dword ptr [eax+0fh],06d4eh
    6. sub dword ptr [eax+19h],02845h
    7. sub dword ptr ds:[07c8c151h],0ac240431h
    8. sub dword ptr [eax],0c358f575h
    9. ....
    Ну и в том же духе. Нравится? Это хотели?

    Воть... (правда это должно выполняться памяти с аттрибутами RWE)
     
  3. Morskoivolk

    Morskoivolk New Member

    Публикаций:
    0
    Регистрация:
    30 янв 2007
    Сообщения:
    85
    ))))) похоже на то! буду пробовать теперь сам приблизетльно в том же русле, коли че интересное выйдет солью в топик! а пока что спасибо!
     
  4. TermoSINteZ

    TermoSINteZ Синоби даоса Команда форума

    Публикаций:
    2
    Регистрация:
    11 июн 2004
    Сообщения:
    3.552
    Адрес:
    Russia
    Morskoivolk
    Вообще, если вы не в курсе, эта техника называется самомодифицирующийся код.
    Есть и без самомодификации, типа каких нить полиморфных\метаморфних движков..
    Хотя я думаю вам надо асм выучить для начала, а не лезть в самые дебри...
     
  5. Morskoivolk

    Morskoivolk New Member

    Публикаций:
    0
    Регистрация:
    30 янв 2007
    Сообщения:
    85
    TermoSINteZ
    так я его никогда не выучу)))
    учится он гораздо легче и быстрее когда есть нужда в решении конкретной задачи. у меня это уменьшение кода и увеличение быстродействия там где это возможно. попутно ассм и учу. если б просто сидел читал главы за главами голого текста о том что такое ассм и как его едят, много б не выдерждал))).
    Понимаете к чему я, ассм учится гораздо легче и эффективней на деле.
    Вот потихоньку и до этих самых
    Код (Text):
    1. самомодифицирующийся код.
    2. Есть и без самомодификации, типа каких нить полиморфных\метаморфних движков..
    докопаюсь)))))
     
  6. TermoSINteZ

    TermoSINteZ Синоби даоса Команда форума

    Публикаций:
    2
    Регистрация:
    11 июн 2004
    Сообщения:
    3.552
    Адрес:
    Russia
    Morskoivolk
    Почитайте Абеля - там и разъясняется хорошо, и задания есть, а примеры с ошибками и это тоже бонус.
    Это не зная начал - нереально.

    Ну не мне судить. Удачи
     
  7. leo

    leo Active Member

    Публикаций:
    0
    Регистрация:
    4 авг 2004
    Сообщения:
    2.542
    Адрес:
    Russia
    Morskoivolk
    На современных процах уменьшение кода И увеличение быстродействия возможно в редких случаях, т.к. оптимизация по быстродействию достигается, во-первых, путем замены компактных, но тормозных команд более простыми и быстрыми, во-вторых, всякими хитростями типа разворота циклов и распараллеливания обработки по нескольким независимым "потокам" команд. Повторю свой полушутливый лозунг - "пиши проще и длиннее, так получится быстрее" ;)
    А про самомодификацию кода вообще забудь "пока рак на горе не свистнет", т.к. это тормоза неимоверные и используются они только в спецзадачах для сокрытия своих коварных замыслов ;)

    Небось древние книжки читаешь, про U & V конвееры ;) Строго говоря, понятие спаривание команд отправилось на свалку истории вместе с первыми Pentium и Pentium MMX, т.к. начиная с Pentium Pro рулит совершенно другой принцип O-o-O (Out-of-Order execution). Спаривание подразумевало, что две соседние независимые команды могут выполняться параллельно на двух конвеерах. Современные же процы могут переставлять независимые микрооперации (мопы) на расстояниях до 8-24 (глубина очереди планировщика) и исполнять параллельно в среднем до 3-х мопов (в Core 2 до 4-х) и аж до 5-9 мопов при пиковых нагрузках. Поэтому для современных процев, понятие "спаривание" можно использовать только с натяжкой, подразумевая под ним "распараллеливание" вообще

    Вывод: выбрасываем книжки, в которых упоминается спаривание и U&V-конвееры, учим\вспоминаем инглиш в объеме средней школы, читаем труды А.Фога по микроархитектуре и оптимизации кода для современных процессоров и - просветляемся ;)))
     
  8. Morskoivolk

    Morskoivolk New Member

    Публикаций:
    0
    Регистрация:
    30 янв 2007
    Сообщения:
    85
    leo Лозунг что надо, лучше и не придумаешь)))). да....теперь понятно, какую лит-ру надо искать и осваивать...спасибо за разъяснение, буду просветляться дальше......
    и не понятно, откуда вообще у меня такая тяга к совершенному?))))) все время хочется уменьшить, убыстрить, оптимизировать....может я больной на голову и на все остальные части тела???? Хотя одно написание на ассме...это уже по сути оптимизация кода и по размеру и по быстродействию.
    Может это и дибилизм, но гораздо приянее знать о своей программе все, что она делает на каждом шагу....чем юзать раздолбанные, глючные проги.....
     
  9. EvilsInterrupt

    EvilsInterrupt Постигающий азы дзена

    Публикаций:
    0
    Регистрация:
    28 окт 2003
    Сообщения:
    2.428
    Адрес:
    Russia
    Morskoivolk
    У всех такая тяга, у меня она была на прежнем месте работы. Когда работы было мало и я в основном сидел и книжки почитывал про криптографию, асм и си читал и Фога пытался. А сейчас все по другому, тута великое и могучее "давай-давай" или "ты чего книжки читаешь, ты прогу пиши", при таком подходе, особо не по оптимизируешь, тут лишь бы отвалили.

    Так что я скажу, почитай все это в качестве общего развития программерской личности. Потом глянь на job.ru и выбери че ты можешь и за что тебе денег дадут. Чую когда ты женишься, если уже не женат, то тебе деньги очень понадобятся.

    В любом случае удачи во всех начинаниях!
     
  10. Morskoivolk

    Morskoivolk New Member

    Публикаций:
    0
    Регистрация:
    30 янв 2007
    Сообщения:
    85
    EvilsInterr
    Да.....пока я на 5 курсе....и щас отдыхаю....практики, дипломы....и т.д. Начнется работа....вот там уже тушите свет....уже не до оптимизаций будет точно....)))))
    Щас как раз взялся за Фога....а на английском гораздо оказывается удобнее и понятнее читать, чем переведенные варианты....как говорится, в англ. из "песни "ой" не выкинешь"))). конкретные слова, конкретные действия.....причем слова эти повторяются на протяжении всей книги, а вот смысл несут разный.)))). с синонимами напряги в англ тех. литературе)))) оно может и к лучшему.
     
  11. Arthur

    Arthur New Member

    Публикаций:
    0
    Регистрация:
    27 янв 2007
    Сообщения:
    494
    Ну скажу и я о том чего немного знаю.
    Оптимизация, это в первую очередь подбор оптимального алгоритма, есть один такой простой алгоритм "пузырьковая сортировка", такие тормоза дает :) Это называется высокоуровневая оптимизация. Про циклы, ловушки, условные переходы это средняя оптимизация. И уже низкоуровневая оптимизация куда входят сами команды процца. Так для матиматических вычеслений shr, shl - Нищтяк, далее lea, и т. д. и т. п. Это уже нужно изучать архитектуру процессора. А насчет того что на асме написано это только уменьшенее размера, а оптимизация это аж три уровня :) Можно на асме такого намутить что интерпретатор ту же самую процедуру в несколько раз быстрее выполнит :)