читал тут на досуге про спаривание команд, и подумал, а можно ли сделать так чтобы код программы состоял в основном из спаривающихся команд? типа mov,push reg, pop reg, lea, nop, inc, dec и еже с ними. ведь на ассме чаще всего используются эти команды, т.е. потенциально уже заложена такая возможность получается...
Morskoivolk У меня был курсач на тему одну... там я придумывал следующее : Код (Text): CryptoString: call _delta _delta: pop eax sub dword ptr [eax+0fh],06d4eh sub dword ptr [eax+19h],02845h sub dword ptr ds:[07c8c151h],0ac240431h sub dword ptr [eax],0c358f575h .... Ну и в том же духе. Нравится? Это хотели? Воть... (правда это должно выполняться памяти с аттрибутами RWE)
))))) похоже на то! буду пробовать теперь сам приблизетльно в том же русле, коли че интересное выйдет солью в топик! а пока что спасибо!
Morskoivolk Вообще, если вы не в курсе, эта техника называется самомодифицирующийся код. Есть и без самомодификации, типа каких нить полиморфных\метаморфних движков.. Хотя я думаю вам надо асм выучить для начала, а не лезть в самые дебри...
TermoSINteZ так я его никогда не выучу))) учится он гораздо легче и быстрее когда есть нужда в решении конкретной задачи. у меня это уменьшение кода и увеличение быстродействия там где это возможно. попутно ассм и учу. если б просто сидел читал главы за главами голого текста о том что такое ассм и как его едят, много б не выдерждал))). Понимаете к чему я, ассм учится гораздо легче и эффективней на деле. Вот потихоньку и до этих самых Код (Text): самомодифицирующийся код. Есть и без самомодификации, типа каких нить полиморфных\метаморфних движков.. докопаюсь)))))
Morskoivolk Почитайте Абеля - там и разъясняется хорошо, и задания есть, а примеры с ошибками и это тоже бонус. Это не зная начал - нереально. Ну не мне судить. Удачи
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-конвееры, учим\вспоминаем инглиш в объеме средней школы, читаем труды А.Фога по микроархитектуре и оптимизации кода для современных процессоров и - просветляемся ))
leo Лозунг что надо, лучше и не придумаешь)))). да....теперь понятно, какую лит-ру надо искать и осваивать...спасибо за разъяснение, буду просветляться дальше...... и не понятно, откуда вообще у меня такая тяга к совершенному?))))) все время хочется уменьшить, убыстрить, оптимизировать....может я больной на голову и на все остальные части тела???? Хотя одно написание на ассме...это уже по сути оптимизация кода и по размеру и по быстродействию. Может это и дибилизм, но гораздо приянее знать о своей программе все, что она делает на каждом шагу....чем юзать раздолбанные, глючные проги.....
Morskoivolk У всех такая тяга, у меня она была на прежнем месте работы. Когда работы было мало и я в основном сидел и книжки почитывал про криптографию, асм и си читал и Фога пытался. А сейчас все по другому, тута великое и могучее "давай-давай" или "ты чего книжки читаешь, ты прогу пиши", при таком подходе, особо не по оптимизируешь, тут лишь бы отвалили. Так что я скажу, почитай все это в качестве общего развития программерской личности. Потом глянь на job.ru и выбери че ты можешь и за что тебе денег дадут. Чую когда ты женишься, если уже не женат, то тебе деньги очень понадобятся. В любом случае удачи во всех начинаниях!
EvilsInterr Да.....пока я на 5 курсе....и щас отдыхаю....практики, дипломы....и т.д. Начнется работа....вот там уже тушите свет....уже не до оптимизаций будет точно....))))) Щас как раз взялся за Фога....а на английском гораздо оказывается удобнее и понятнее читать, чем переведенные варианты....как говорится, в англ. из "песни "ой" не выкинешь"))). конкретные слова, конкретные действия.....причем слова эти повторяются на протяжении всей книги, а вот смысл несут разный.)))). с синонимами напряги в англ тех. литературе)))) оно может и к лучшему.
Ну скажу и я о том чего немного знаю. Оптимизация, это в первую очередь подбор оптимального алгоритма, есть один такой простой алгоритм "пузырьковая сортировка", такие тормоза дает Это называется высокоуровневая оптимизация. Про циклы, ловушки, условные переходы это средняя оптимизация. И уже низкоуровневая оптимизация куда входят сами команды процца. Так для матиматических вычеслений shr, shl - Нищтяк, далее lea, и т. д. и т. п. Это уже нужно изучать архитектуру процессора. А насчет того что на асме написано это только уменьшенее размера, а оптимизация это аж три уровня Можно на асме такого намутить что интерпретатор ту же самую процедуру в несколько раз быстрее выполнит