| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Asm: Общие вопросы > ESI, EDI - почему они? |
| Автор: stab 7.7.2007, 12:34 | ||
в исходниках часто вижу такое: авторы пытаются использовать ESI, EDI при организации циклов чтения\записи\копирования, принося в жертву работу на регистрах без использования стека. в самом теле цикла нет ни комманд с префиксом rep, ни комманд вроде movsb, т.е. что-то вроде:
исходники довольно новые, датированы нашим веком з.ы. форум по асму вообще жив? ) |
| Автор: Kuvaldis 7.7.2007, 13:02 |
| stab, Как я понимаю: тут сделано простое "ручное" movsd, причем оно медленнее работает (нет аппаратной поддержки), больше по коду (смотрим формат машинной команды) да и вообще не эстетично ВЫВОД: такой подход от незнания команд Добавлено через 1 минуту и 31 секунду А так как код ЯВНО 32-битный, то вместо esi/edi можно использовать любой из регистров общего назначения. |
| Автор: stab 7.7.2007, 13:18 |
| дело в том, что код делался какими-то вроде как гуру, оптимизации под MMX, SSE, т.д. вот я и задумался, может они что-то знают чего не знаем мы? з.ы. для меня критична именно скорость работы.. |
| Автор: W4FhLF 7.7.2007, 14:37 |
Обоснуйте. Люди съевшие собаку на оптимизации с таким мнением несогласны. Для какого процессора и на основании чего делались выводы? |
| Автор: Kuvaldis 7.7.2007, 14:53 | ||
W4FhLF,
А для чего в архитектуру INTEL были введены строковые команды? ИМХО, все, что делается на аппаратном уровне, должно выполняться быстрее. Даже в универе как-то тестили ради интереса похожие вещи (не хотелось верить, что строковые команды лучше) Кстати, как я понимаю, именно поэтому например, сохранение регистров и т.д. при переключении задач стараются делать на аппаратном уровне. НО! Я могу и ошибаться. Если я не прав, то с удовольствием выслушаю компетентное мнение. |
| Автор: stab 8.7.2007, 06:45 |
| W4FhLF, мой вопрос был скорее в том, почему авторы выбрали для работы ESI, EDI, ECX, вместо оригинальных EAX, EDX, ECX. |
| Автор: dumb 8.7.2007, 13:23 | ||
потому что "оригинальных" просто не хватает для такой реализации. eax - обменник, ecx - счетчик, нужно еще два для src-dst, а у тебя только edx остался. а коль уж все равно сохраняться, то почему не сделать все через привычные "строковые" регистры? также не исключен вариант "недо-переделки": автор просто заменил rep movsd на "ручной" цикл, а "обвеску" менять не стал... |
| Автор: Kuvaldis 8.7.2007, 15:16 |
| W4FhLF, Сиба за инфу |
| Автор: Kuvaldis 8.7.2007, 15:35 |
| кстати, полезная ссылка: http://www.rsdn.ru/Forum/message/18426.flat.aspx |