Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Низкоуровневое программирование > Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 21.09.2013, 16:17   #11
Opterezon
 
Регистрация: 15.09.2013
Сообщений: 8
По умолчанию

Цитата:
Сообщение от alexey_kip Посмотреть сообщение
Я DOS планирую использовать. Если я правильно понимаю там одно ядро только участвует и нет лишних фоновых программ
Если используешь циклы, то будут срабатывать лишние прерывания, что может сказаться на скорости и нести кучу ошибок. Не знаю, сколько производительности отнимут команды CLI-STI, но всяко меньше. Кстати, в защищенном режиме их использование в вечном цикле просто незаменимо.
Opterezon вне форума Ответить с цитированием
Старый 22.09.2013, 15:42   #12
alexey_kip
Форумчанин
 
Регистрация: 19.11.2011
Сообщений: 198
По умолчанию

Как же я время засекать буду, если все прерывания отключу?
Я планирую 2 цикла сделать: первый - основной, который содержит саму команду, второй - пустой,точно такой же но без этой команды.
Засекаю время выполнения обеих циклов и отнимаю от первого второй
alexey_kip вне форума Ответить с цитированием
Старый 23.09.2013, 09:31   #13
Opterezon
 
Регистрация: 15.09.2013
Сообщений: 8
По умолчанию

Цитата:
Сообщение от alexey_kip Посмотреть сообщение
Как же я время засекать буду, если все прерывания отключу?
Я планирую 2 цикла сделать: первый - основной, который содержит саму команду, второй - пустой,точно такой же но без этой команды.
Засекаю время выполнения обеих циклов и отнимаю от первого второй
Тогда не проще использовать мой самый первый способ? У него точность будет гораздо больше. Команды сдвигов регистров работают очень быстро. 10 000 строк рода mov eax,ebx исполняются практически мгновенно, а такие циклы (как loop) исполняются ограниченное количество раз.
Opterezon вне форума Ответить с цитированием
Старый 23.09.2013, 10:50   #14
Vapaamies
Ваш К. О.
Участник клуба
 
Аватар для Vapaamies
 
Регистрация: 26.12.2012
Сообщений: 1,777
По умолчанию

Сначала я честно пытался понять в ассемблерном отладчике, как работает QueryPerformanceFrequency в Windows. Оказалось, что в нем используются SYSENTER и LEAVE, которые, по всей видимости, обращаются к объектам ядра, поэтому ничего понять не удалось.

А сегодня на свежую голову вспомнил, что код реализации QueryPerformanceCounter и QueryPerformanceFrequency под DOS должен быть в HX DOS Extender. И правда, нашел у себя в локальной копии в файле qperfcnt.asm. Так что могу предложить скачать исходники HX и разобраться.
Vapaamies вне форума Ответить с цитированием
Старый 25.09.2013, 11:02   #15
Opterezon
 
Регистрация: 15.09.2013
Сообщений: 8
По умолчанию

Кстати, я чисто из эксперимента написал код примерно в 20 000 строк рода
"mov eax, ebx mov ebx, eax" и в конец добавил нечто вроде хелоуворда. На моем компьютере процессор Celeron 2,6 Ghz, скомпилировал этот код и запустил Com-файл в DOSBOX. К удивлению, на довольно таки старом процессоре, приложение выполнилось мгновенно. Под чистым досом это тоже выполнилось мгновенно. Как показала практика, реализовать программную задержку на современных процессорах не так то просто.
Opterezon вне форума Ответить с цитированием
Старый 25.09.2013, 11:44   #16
DiemonStar
Старожил
 
Регистрация: 08.02.2012
Сообщений: 2,173
По умолчанию

Цитата:
Сообщение от alexey_kip Посмотреть сообщение
Как же я время засекать буду, если все прерывания отключу?
Я планирую 2 цикла сделать: первый - основной, который содержит саму команду, второй - пустой,точно такой же но без этой команды.
Засекаю время выполнения обеих циклов и отнимаю от первого второй
а считать с порта таймера не судьба? а разница и будет тем самым временем в тиках по 55мс

Цитата:
Сообщение от Opterezon Посмотреть сообщение
Кстати, я чисто из эксперимента написал код примерно в 20 000 строк рода
"mov eax, ebx mov ebx, eax" и в конец добавил нечто вроде хелоуворда. На моем компьютере процессор Celeron 2,6 Ghz, скомпилировал этот код и запустил Com-файл в DOSBOX. К удивлению, на довольно таки старом процессоре, приложение выполнилось мгновенно. Под чистым досом это тоже выполнилось мгновенно. Как показала практика, реализовать программную задержку на современных процессорах не так то просто.
а чего Вы хотели? это же оптимальнейший код для конвейера))
Правильно поставленная задача - три четверти решения.

Последний раз редактировалось DiemonStar; 25.09.2013 в 11:47.
DiemonStar вне форума Ответить с цитированием
Старый 25.09.2013, 15:24   #17
Opterezon
 
Регистрация: 15.09.2013
Сообщений: 8
По умолчанию

Цитата:
Сообщение от DiemonStar Посмотреть сообщение
а чего Вы хотели? это же оптимальнейший код для конвейера))
Я когда был ламером, недооценивал мощность компьютеров и пытался экономить на каждой подобной команде. Выводы делал как и большинство школьников, обвиняя именно компьютер. Хотя как оказалось, вина именно в программном обеспечении, в частности, в винде. Ибо это была нелепая куча не оптимизированного быдлокода на и без того деревянного C++.
Opterezon вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
cmd. частично не работает отключение вывода результата выполнения команды goluzov Общие вопросы C/C++ 1 06.12.2012 12:10
Время выполнения команды на С nastya2112 Общие вопросы C/C++ 4 06.11.2012 11:48
Оценка среднего времени выполнения команды(на просто С) nastya2112 Помощь студентам 0 06.11.2012 11:21
Вложенный вызов обработчика ( проще - дублирование выполнения команды) DeKot Общие вопросы Delphi 2 08.01.2012 22:11