Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Определение Частоты cpu c RDTSC, Нужна помощь!!! 
:(
    Опции темы
Dex
Дата 10.3.2005, 19:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 31
Регистрация: 9.3.2005

Репутация: нет
Всего: нет



Нужно апределить частоту процессора. Делается это как то так.Для начала в программе измеряется длительность (в тактах процессора) 16-ти временных интервалов между отсчетами системного таймера, после чего вычисляется средняя длительность интервала. Полученное усредненное значение умножается на частоту тактового генератора системного таймера (1 193 180 Гц), а затем делится на коэффициент пересчета системного таймера (65 536). Полученный результат делится на константу 1 000 000 для получения значения внутренней частоты процессора в мегагерцах.
И все бы хорошо но счетчик тактов аж 64 битный и если кто может подкинте алгоритм перевода 32-ух разряного числа в строку. smile
PM MAIL   Вверх
Ruterian
Дата 11.3.2005, 00:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 68
Регистрация: 9.1.2004
Где: Вязьма, Минск

Репутация: нет
Всего: нет



Дык, классический пример (прям как по книге)

Код

; Определить тактовую частоту
; Настроить сегментный регистр ES на область данных BIOS
    xor ax,ax
    mov es,ax
    mov eax,es:[046ch]    ; Запомнить текущее время
; Ожидать изменения состояния системного таймера
t0:   
    cmp eax,es:[046ch]
    je t0
; Запомнить значение счетчика тиков
    db 0fh,31h        ;команда RDTSC
    mov [starttsc],eax
; Запомнить начальное значение системного времени
    mov eax,es:[046Ch]
; Ожидать в течение 16 тиков
    add eax,16
t1:
    cmp eax,es:[046Ch]
    ja t1
; Получить конечное значение счетчика тиков
    db 0fh,31h        ;команда RDTSC
; Вычислить среднюю длительность интервала
; (число тактов в одном тике)
    sub eax,[starttsc]
    shr eax,4        ;деление на 16
; Умножить длительность интервала на частоту генератора системного таймера
    mov edx,1193180
    mul edx
; Разделить результат на коэффициент пересчета системного таймера (65536)
    shrd eax,edx,16
    xor edx,edx       ; Вычислить частоту в МГц (разделить на 1000000)
    mov ebx,1000
    div ebx
    push cs
    pop es
; Теперь у нас в EAX частота CPU
    mov [freq],eax    ; запомнить ее
               retn

starttsc    dd    0
freq    dd    1



Частоту в данном примере получаем в Кгц
PM MAIL WWW ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Asm: Общие вопросы"
MAKCim
  • Проставьте несколько ключевых слов темы, чтобы её можно было легче найти.
  • Не забывайте пользоваться кнопкой КОД.
  • Телепатов на форуме нет! Задавайте чёткий, конкретный и полный вопрос. Указывайте полностью ошибки компилятора и компоновщика.
  • Новое сообщение должно иметь прямое отношение к разделу форума. Флуд, флейм, оффтопик запрещены.
  • Категорически запрещается обсуждение вареза, "кряков", взлома программ и т.д.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, MAKCim.

 
 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Asm: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0394 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.