![]() |
|
![]() ![]() ![]() |
|
Delphist |
|
|||
![]() Delphist Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2145 Регистрация: 3.2.2004 Где: всегда в сети Репутация: нет Всего: 3 |
Установил супер профайлер AQTime 6.21, который анализирует время работы кода построчно.
Взял в Delphi написал тупой код см. вложение (большие числа слева это машинные циклы на выполнение данной инструкции), и профайлер показал, что DEC работает медленнее чем sub. Как это? Это сообщение отредактировал(а) Delphist - 3.9.2010, 17:13 Присоединённый файл ( Кол-во скачиваний: 19 ) ![]() -------------------- ProcessInfo 1-ая моя программа (аналог spyxx.exe с гораздо большим функц-ом - внедрение dll в адр. простр. процесса, перехват API-функций, разбор приложения на окна мн.др). Когда-то давным-давно использовал это... |
|||
|
||||
okkonst |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 33 Регистрация: 5.9.2010 Где: Воронеж Репутация: нет Всего: 1 |
Думаю, на этот вопрос смогут ответить только разработчики профайлера - только они знают, о чем думает их продукт ![]() I:=GetTickCount; asm move ecx, 1000000000 dec ecx dec ecx dec ecx [и так еще миллион раз, на самом деле - надо подобрать так, чтобы с секунду думало] end; I:=GetTickCount-I; Даем задаче реалтаймовый приоритет и засекаем время. Потом меняем dec на SUB - и выясняем правду... |
|||
|
||||
Mikl_ |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 537 Регистрация: 9.11.2007 Репутация: 6 Всего: 14 |
Delphist
аналоги команды DEC EAX SUB EAX,1 ADD EAX,0FFFFFFFFh LEA EAX,[EAX+0FFFFFFFFh] пара команд NEG EAX/NOT EAX аналог команды DEC ECX loop $+2 ![]() Это сообщение отредактировал(а) Mikl_ - 6.9.2010, 04:31 |
|||
|
||||
okkonst |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 33 Регистрация: 5.9.2010 Где: Воронеж Репутация: нет Всего: 1 |
Аналоги по действию. А по числу машинных тактов на операцию? Мы ведь, по сути, именно об этом говорим - о времени выполнения. Когда-то давно - точно нет: sub и add были значительно дольше. Теперь - не знаю. Тем более, что обработка команд процессором параллельна. |
|||
|
||||
Mikl_ |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 537 Регистрация: 9.11.2007 Репутация: 6 Всего: 14 |
okkonst,
а по числу машинных тактов нужно проверять на живой машине, по тактам все они занимают одинаковое время если судить по справочнику, различие по влиянию на флаги, DEC не влияет на CF и OF, но влияет на AF, ZF, SF; SUB и ADD влияют на CF, OF, AF, ZF, SF; LEA не влияет на флаги совсем |
|||
|
||||
Tronix |
|
|||
Новичок Профиль Группа: Участник Сообщений: 4 Регистрация: 15.10.2009 Репутация: нет Всего: нет |
Возможно ошибусь, но предположу, что современные профайлеры могут использовать MSR регистры процессора для определения времени выполнения команд. Можно про них почитать вкратце здесь http://wasm.ru/article.php?article=inspr00 (начиная со слов "MSR регистры"). Там же остальные 3 части статьи.
|
|||
|
||||
![]() ![]() ![]() |
Правила форума "Asm: Общие вопросы" | |
|
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, MAKCim. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Asm: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |