Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Тактовая частота проца 
:(
    Опции темы
pvn
Дата 10.12.2006, 21:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Как можно в Ассемблере определить тактовую частоту процессора? Может кто знает с помощью какой функции и какого прерывания?
PM MAIL   Вверх
10110111
Дата 11.12.2006, 22:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Ну, вообще-то, по-моему, с помощью прерываний это затруднительно, но, если проц Pentium Pro (если не ошибаюсь, он) или выше, то можно с помощью rdtsc и системного таймера.
Код

    push    0
    pop    ds
    mov    eax,dword [8*4]
    mov    word [8*4],IRQ0Handler
    mov    word [8*4+2],cs
    mov    ds,word [8*4+2]
    mov    dword [OldHandler],eax
LP:
    cmp    byte [Flag],1
    jne    LP
    mov    eax,dword [Freq]
    mov    edx,dword [Freq+4]
    mov    ecx,65536
    mov    ebx,1193180
    mul    ebx
    div    ecx
;Теперь в EAX значение частоты в герцах
;Здесь какой-то код
    retn
IRQ0Handler:
    pushad
    rdtsc
    push    ds
    push    cs
    pop    ds
    cmp    byte [Flag],0ffh
    jne    NotFF
    mov    byte [Flag],0
    jmp    IntRet
NotFF:
    sub    eax,dword [Freq]
    sbb    edx,dword [Freq+4]
    mov    byte [Flag],1
    mov    ecx,[OldHandler]
    push    0
    pop    ds
    mov    dword [8*4],ecx
IntRet:
    mov    dword [cs:Freq],eax
    mov    dword [cs:Freq+4],edx
    pop    ds
    mov    al,20h
    out    20h,al
    popad
    iret


PM MAIL   Вверх
chyapay
Дата 7.1.2007, 17:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 29
Регистрация: 6.2.2006
Где: UA, Lviv

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



а в защищенном режиме?? возможно ли? я имею в виду если в собственном бут-страп коде или в кернеле сделать подобную функцию и каждый раз после загрузки системы ее результат куда-то ложить чтобы потом ОС могла выдавать его прогам под их спрос. кроме того, согласитесь, и самой ОС неплохо бы знать тактовую частоту проца.
PM MAIL ICQ YIM   Вверх
Ant
Дата 2.3.2007, 11:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



chyapay, а как же Qool'n'Que?
PM MAIL   Вверх
Mikl__
Дата 21.5.2007, 11:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Если интересноsmile

Присоединённый файл ( Кол-во скачиваний: 15 )
Присоединённый файл  FreqCPU.rar 1,70 Kb
PM MAIL   Вверх
MAKCim
Дата 21.5.2007, 12:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Воін дZэна
****


Профиль
Группа: Экс. модератор
Сообщений: 5644
Регистрация: 10.12.2005
Где: Менск, РБ

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



если есть поддержка ACPI, то можно узнать готовое значение частоты (поле CoreFreq объекта _PSS)


--------------------
Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі ©

PM MAIL   Вверх
Mikl__
Дата 22.5.2007, 03:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



MAKCim
Цитата

если есть поддержка ACPI, то можно узнать готовое значение частоты (поле CoreFreq объекта _PSS)

 smile 
PM MAIL   Вверх
MAKCim
Дата 22.5.2007, 12:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Воін дZэна
****


Профиль
Группа: Экс. модератор
Сообщений: 5644
Регистрация: 10.12.2005
Где: Менск, РБ

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



Mikl__
Это сложно
Код

; FASM
acpi:
    mov eax, 0xDFFF8 ; сканируем адреса 0xE0000 - 0xFFFFF в поисках RSDP
    xor ebx, ebx
@@:
    add eax, 8
    test eax, 0x100000
    jnz __end ; not found
    cmp dword [eax], 0x20445352 ; младшие 32 бита сигнатуры RSDP
    jnz @B
    cmp dword [eax + 4], 0x20525450 ; старшие 32 бита сигнатуры RSDP
    jnz @B
    mov eax, dword [eax + 16] ; адрес RSDT
    add eax, 72 ; адрес таблицы адресов остальных таблиц
@@:
    mov ebx, dword [eax] ; адрес заголовка таблицы
    cmp ebx, 0x50434146 ; ищем FADT по сигнатуре заголовка
    jnz @B
    mov eax, dword [eax + 76] ; получаем адрес DSDT из таблицы FADT
    add eax, 36 ; адрес AML кода
    mov ebx, eax
__end:
    mov eax, ebx
    ret

код находит адрес AML кода и возвращает его в EAX (если ACPI не поддерживается, возвращает 0)
AML код кодирует по определенным правилам объекты и методы, среди объектов надо найти _PSS и прочитать значение CoreFreq
для интерпретации AML кода нужен AML-интерпретатор  smile 

Это сообщение отредактировал(а) MAKCim - 22.5.2007, 12:47


--------------------
Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі ©

PM MAIL   Вверх
Mikl__
Дата 23.5.2007, 03:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



MAKCim
большое спасибо, а как получить частоту CPU из BIOS'а в Protect Mode? 
PM MAIL   Вверх
MAKCim
Дата 23.5.2007, 08:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Воін дZэна
****


Профиль
Группа: Экс. модератор
Сообщений: 5644
Регистрация: 10.12.2005
Где: Менск, РБ

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



Цитата(Mikl__ @  23.5.2007,  03:32 Найти цитируемый пост)
большое спасибо, а как получить частоту CPU из BIOS'а в Protect Mode?  

если знаешь, где она лежит в BIOS, то просто читаешь из этой области памяти
(если включен страничный режим, дополнительно нужно отобразить 0xE0000 - 0xFFFFF на виртупльное адресное пространство)


--------------------
Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі ©

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

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

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


 




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


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

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