Только что прочитал статью http://wasm.ru/article.php?article=1010001 Решил проверить: Код (Text): mov eax, 1 METKA: add eax, 1 cmp eax, 4000000000 jne METKA Код (Text): N dd 1 ... mov N, 1 METKA: add N, 1 cmp N, 4000000000 jne METKA Первый выполнялся 2 секунды, второй 8 секунд. Можно ли сделать какую то программу которая в уже в готовом ".exe" сделает все необходимые изменения из той статьи для повышения скорости? )
В общем случае, думаю, нет. Необходим глобальный анализ кода и продумывание вариантов использования для данной цели регистров. Что если, скажем, переменная, с котоой в исходной процедуре активно работали, будет использоваться и вне этой процедуры, тогда как при использовании только регистров она останется пуста? И какие регистры стоит оставить нетронутыми, а какие можно менять? Скажем, у меня в "джентльменском наборе" есть функция, возвращающая результат не только в EAX, но ещё и в EDX. Без вдумчивого анализа, который самые современные программы - и те едва ли способны реализовать, тут делать нечего.
trr загрузки 4000000000 в регистр будет еще быстрее и цикл разверни, тогда вообще взлетит с отрывом от земли нормальные компиляторы все это делают сами. Intel C++ чуть круче чем gcc, но гнус более гибкий в плане настройки, зато у интеля есть свой профайлер, выполняющий компиляцию с учетом реальной оперативной обставновки. это, конечно, не для асмовских программ, которые оптимизить приходится вручную.
Ещё на 25% быстрее, но 19 байт Код (Text): BA0EF70000 MOV EDX,0F70E 2BC9 SUB ECX,ECX METKA: 41 INC ECX 2BC0 SUB EAX,EAX METKA1: 40 INC EAX 3BC2 CMP EAX,EDX 75FB JNZ SHORT METKA1 3BCA CMP ECX,EDX 75F4 JNZ SHORT METKA Вобщем, как я понял из ответов, бессмысленная затея.