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

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

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 22.09.2010, 22:03   #1
bondik
Форумчанин
 
Регистрация: 24.04.2008
Сообщений: 300
По умолчанию Определение тактовой частоты процессора

Вообщем исходники
Код:
double CPUSpeed(void) 
  { 
    DWORD dwTimerHi, dwTimerLo; 
    asm
     { 
        DW 0x310F 
        mov dwTimerLo, EAX 
        mov dwTimerHi, EDX 
      } 
    Sleep (500); 
    asm
     { 
        DW 0x310F 
        sub EAX, dwTimerLo 
        sub EDX, dwTimerHi 
        mov dwTimerLo, EAX 
        mov dwTimerHi, EDX 
     } 
    return dwTimerLo/(1000.0*500); 
  }
DW 0x310F это понятно,апкод rdtsc

потом записываем значение тактов начальное
Код:
mov dwTimerLo, EAX 
mov dwTimerHi, EDX
потом ждем 0.5 секунды

потом вычитаем из начального конечное,и записываем обратно в переменные

Код:
sub EAX, dwTimerLo 
sub EDX, dwTimerHi 
mov dwTimerLo, EAX 
mov dwTimerHi, EDX
Вопросы возникли в последней строчке
Код:
dwTimerLo/(1000.0*500);
1) во-первых почему работаем только с младшим байтом ?
Код:
TimerLo
2)почему делим на 1000* 500 ,500 это видимо время задержки в милисекундах,хотя зачем они нам,если один герц это один такт в одну секунду??? и откуда 1000 в делителе?

3)я не очень в ассембеле шарю что значит dw, вызов инструкции?
bondik вне форума Ответить с цитированием
Старый 22.09.2010, 23:52   #2
Tema_Crazzzy
Форумчанин
 
Регистрация: 29.04.2010
Сообщений: 114
По умолчанию

DW - это директива, которая объявляет данные в размере одного слова, т.е. 2 байта.
Tema_Crazzzy вне форума Ответить с цитированием
Старый 23.09.2010, 01:52   #3
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

2)не надо думать что один герц равно один такт.
во вторых одна команда <> один такт(не всегда уж точно)
Intel вам не ARM.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 23.09.2010, 01:57   #4
savva
Форумчанин
 
Регистрация: 10.06.2010
Сообщений: 225
По умолчанию

а ты удали,и посмотри что будет

1) не понял в чём вопрос?что за лмадший байт?

у тебя обе переменные DWORD dwTimerHi, dwTimerLo; 2-ух байтные. define word.
За помощь: Нажмите на весы слева от сообщения!
savva вне форума Ответить с цитированием
Старый 23.09.2010, 02:51   #5
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

кстати, у нас не младший байт, а младший DWORD, ибо счетчик возвращает unsigned long long(64-бита)
а адресуем мы 32-бита по умолчанию.
поэтому работаем с половинками.
savva, в 32-битах DWORD принят как 4 байта, а не 2.

вообще такие вставки надо или юзать как есть или учить асм.
(чтоб не задавать глупых вопросов)

потому что врятли у нас изменится верхний, потому только младший берем.

а насчет 1000, то это перевод наносекунд в милисекунды(или микро?)
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.

Последний раз редактировалось Пепел Феникса; 23.09.2010 в 02:54.
Пепел Феникса вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Генератор звуковой частоты doober Общие вопросы .NET 3 11.09.2010 22:35
Определить время выполнения программы при известной тактовой частоте new player Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 10 07.09.2010 12:14
Определение тактовой частоты процессора lesega Свободное общение 3 21.05.2009 14:13
Подсчет количества и частоты Ensoph Помощь студентам 6 08.05.2008 10:16