Легенда:
новое сообщение
закрытая нитка
новое сообщение
в закрытой нитке
старое сообщение
|
- Напоминаю, что масса вопросов по функционированию форума снимается после прочтения его описания.
- Новичкам также крайне полезно ознакомиться с данным документом.
[UPD]да для того чтоб 15.03.05 23:36 Число просмотров: 3111
Автор: Killer{R} <Dmitry> Статус: Elderman Отредактировано 16.03.05 02:16 Количество правок: 5
|
> которым я себя пока не отношу) могут определить, как будет > выполняться код быстрее или медленнее и для этого не > обязательно быть семь пядей во лбу, а достаточно усвоить > небольшое кол-во правил оптимизации. да для того чтоб
mov eax,0
заменить на
xor eax, eax
Или там чередовать команды использующие разные регистры действительно сильно умным не надо быть. А вот слабо чередовать команд не просто так, а с учетом временных задержек памяти (ну там 10 тактов к примеру)? + к этому с учетом особенностей архитектур разных процессоров (Intel C++ compiler умеет например оптимизировать конкретно под каждое ядро)? Или вот как уже упоминалось распределить регистры между вызывающей/вызываемой функциями чтобы минимизировать использование памяти, причем не так - "ээээ.. наверно лучше ecx, ebx -в функцию, eax результат.." а с четким перебором ВСЕХ возможных вариантом с выбором МИНИМУМА? А представь среднестатистическую функцию на С - строчек 50 кода. Ее представление в асме займет не меньше 200 строк. А функций в обычном проекте - тысячи.... А редактирование такого кода? Будешь по новой пересчитывать растактовки для нового кода?.. А потом глюк и опять да?
PS Компьютер Deep Blue выиграл у Гарри Каспарова в сходной задаче. Неужели ты умнее Каспарова? Неужели все те кто твердят что лишь асм рулезен умнее его?
--[UPD]--
Насчет прозрачности и понятности, какие из следующих примеров, делающих одно и тоже, более прозрачны (на асме-оптимизированный вариант, на С - какой есть, оптимизирует-то компилятор Ж)):
----
**Пример1:
asm:
shr ax, 1
xchg ah, al
cbw
C:
int x=a/512;
-----
**Пример2:
mov bx, ax
shl ax, 2
add ax, bx
shl ax, 1
C:
int x=a*10;
ЗЗЫ Данные примеры взяты отсюда - http://www.gyry.net/?d=programming&did=412
Надо сказать я и сам когдато пользовался такими фокусами
Стоит заметить что такие доки как в вышеприведенной ссылке, по которым и учаться большинство кул-ассемблерщиков, написаны еще для процессоров типа 286,386... Особо продвинутые изучают пентиумы. Но изучить и успешно оптимизировать хотябы на уровне вот таких вот фокусов для ВСЕХ процессоров - импоссибл.
|
|
|