![]() |
|
![]() ![]() ![]() |
|
stab |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 1839 Регистрация: 1.1.2003 Репутация: нет Всего: 48 |
в исходниках часто вижу такое: авторы пытаются использовать ESI, EDI при организации циклов чтения\записи\копирования, принося в жертву работу на регистрах без использования стека. в самом теле цикла нет ни комманд с префиксом rep, ни комманд вроде movsb, т.е. что-то вроде:
исходники довольно новые, датированы нашим веком ![]() з.ы. форум по асму вообще жив? ) -------------------- 6, 6, 6 - the number of the beast. |
|||
|
||||
Kuvaldis |
|
|||
![]() механик-вредитель ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1189 Регистрация: 16.6.2006 Где: Минск Репутация: нет Всего: 61 |
stab,
Как я понимаю: тут сделано простое "ручное" movsd, причем оно медленнее работает (нет аппаратной поддержки), больше по коду (смотрим формат машинной команды) да и вообще не эстетично ВЫВОД: такой подход от незнания команд Добавлено через 1 минуту и 31 секунду А так как код ЯВНО 32-битный, то вместо esi/edi можно использовать любой из регистров общего назначения. -------------------- Помни - когда ты спишь, враг не дремлет Спи чаще и дольше, изматывай врага бессоницей |
|||
|
||||
stab |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 1839 Регистрация: 1.1.2003 Репутация: нет Всего: 48 |
дело в том, что код делался какими-то вроде как гуру, оптимизации под MMX, SSE, т.д. вот я и задумался, может они что-то знают чего не знаем мы?
з.ы. для меня критична именно скорость работы.. -------------------- 6, 6, 6 - the number of the beast. |
|||
|
||||
W4FhLF |
|
|||
![]() found myself ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2831 Регистрация: 2.12.2006 Репутация: 3 Всего: 121 |
Обоснуйте. Люди съевшие собаку на оптимизации с таким мнением несогласны. Для какого процессора и на основании чего делались выводы? -------------------- "Бог умер" © Ницше "Ницше умер" © Бог |
|||
|
||||
Kuvaldis |
|
|||
![]() механик-вредитель ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1189 Регистрация: 16.6.2006 Где: Минск Репутация: нет Всего: 61 |
W4FhLF,
А для чего в архитектуру INTEL были введены строковые команды? ИМХО, все, что делается на аппаратном уровне, должно выполняться быстрее. Даже в универе как-то тестили ради интереса похожие вещи (не хотелось верить, что строковые команды лучше) Кстати, как я понимаю, именно поэтому например, сохранение регистров и т.д. при переключении задач стараются делать на аппаратном уровне. НО! Я могу и ошибаться. Если я не прав, то с удовольствием выслушаю компетентное мнение. -------------------- Помни - когда ты спишь, враг не дремлет Спи чаще и дольше, изматывай врага бессоницей |
|||
|
||||
W4FhLF |
|
||||||
![]() found myself ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2831 Регистрация: 2.12.2006 Репутация: 3 Всего: 121 |
Нет, ну хороший вопрос ![]()
Что ты имеешь ввиду? А обычные команды они как по-твоему выполняются? Не ОС же их эмулирует. Для маленьких буферов(кб) movsd наверное самый лучший вариант, ну а для больших существуют более эффективные варианты. В вышеприведённой функции можно, например, развернуть цикл в два раза и уже получишь выигрыш(хотя бы потому что число кеш-промахов сократиться). Например:
Или, немножко из другой области, но всё же приведу:
http://www.insidepro.com/kk/024/024r.shtml (причём обрати внимание насколько разняться результаты для разных процессоров, так, что единую формулу вывести невозможно) Это сообщение отредактировал(а) W4FhLF - 7.7.2007, 15:32 -------------------- "Бог умер" © Ницше "Ницше умер" © Бог |
||||||
|
|||||||
stab |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 1839 Регистрация: 1.1.2003 Репутация: нет Всего: 48 |
W4FhLF, мой вопрос был скорее в том, почему авторы выбрали для работы ESI, EDI, ECX, вместо оригинальных EAX, EDX, ECX.
-------------------- 6, 6, 6 - the number of the beast. |
|||
|
||||
dumb |
|
|||
![]() sceloglauxalbifacies ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 2929 Регистрация: 16.6.2006 Репутация: 4 Всего: 158 |
потому что "оригинальных" просто не хватает для такой реализации. eax - обменник, ecx - счетчик, нужно еще два для src-dst, а у тебя только edx остался. а коль уж все равно сохраняться, то почему не сделать все через привычные "строковые" регистры? также не исключен вариант "недо-переделки": автор просто заменил rep movsd на "ручной" цикл, а "обвеску" менять не стал... |
|||
|
||||
Kuvaldis |
|
|||
![]() механик-вредитель ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1189 Регистрация: 16.6.2006 Где: Минск Репутация: нет Всего: 61 |
W4FhLF,
Сиба за инфу ![]() -------------------- Помни - когда ты спишь, враг не дремлет Спи чаще и дольше, изматывай врага бессоницей |
|||
|
||||
Kuvaldis |
|
|||
![]() механик-вредитель ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1189 Регистрация: 16.6.2006 Где: Минск Репутация: нет Всего: 61 |
-------------------- Помни - когда ты спишь, враг не дремлет Спи чаще и дольше, изматывай врага бессоницей |
|||
|
||||
![]() ![]() ![]() |
Правила форума "Asm: Общие вопросы" | |
|
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, MAKCim. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Asm: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |