Часовой пояс: UTC + 3 часа




Начать новую тему Новая тема / Ответить на тему Ответить  Сообщений: 14 
  Пред. тема | След. тема 
В случае проблем с отображением форума, отключите блокировщик рекламы
Автор Сообщение
 

Member
Статус: Не в сети
Регистрация: 13.08.2005
Доброго времени суток, господа! Мне тут подруга подкинула проблем! Через 3 дня (сегодня 4-е декабря) ей нужно сдавать курсовик по системному ПО. А он еще не делался... Одно из заданий - определить тип и основные характеристики процессора. У меня под рукой только учебник Юрова, где эта вещь описана крайне скупо. Люди добрые, подскажите как определить тактовую частоту (для любого проца) и модель процессора (для процов от AMD). Если у кого есть исходник программы типа CPUZ буду благодарен если им со мной поделятся!

_________________
I L.A.W. you, baby!
For a GNU dawn! For freedom! :-)



Партнер
 

Advanced member
Статус: Не в сети
Регистрация: 30.08.2003
Откуда: Санкт-Петербург
Цитата:
тактовую частоту (для любого проца)

намек - RDTSC ;)
Цитата:
модель процессора (для процов от AMD)

CPUID, а затем смотрим флаги...

работающий движок детекта:
http://www.google.com/search?client=ope ... 8&oe=utf-8
переписать польностью на асме, ИМХО, не проблема.

_________________
{:€ дед в законе :-) нородный окодемег
почетный пользователь OpenSuSE 11.3
Ремонт и модернизация ноутбуков IBM (Lenovo) ThinkPad


 

Member
Статус: Не в сети
Регистрация: 13.08.2005
Root писал(а):
CPUID, а затем смотрим флаги...

Это понятно. Но у меня нет справочной информации по результатам работы. Есть только для пней (спасибо Юрову, который, по-моему, вообще не подозревает о существовании AMD).
И насчет частоты по-подробней можно?

_________________
I L.A.W. you, baby!
For a GNU dawn! For freedom! :-)


 

Advanced member
Статус: Не в сети
Регистрация: 30.08.2003
Откуда: Санкт-Петербург
L.A.W.
по поводу значений для АМД см. движок YMi0SDGL
также отправляю читать даташит на АМД за нумером #20734
по поводу RDTSC:
http://www.google.com/search?client=ope ... 8&oe=utf-8

_________________
{:€ дед в законе :-) нородный окодемег
почетный пользователь OpenSuSE 11.3
Ремонт и модернизация ноутбуков IBM (Lenovo) ThinkPad


 

Member
Статус: Не в сети
Регистрация: 13.08.2005
Root писал(а):
также отправляю читать даташит на АМД за нумером #20734

Издеваешься, да? :-) Мне за эти дни еще это все нужно сделать резидентным, заставить передваться через DATALINK и все это под XP-хой... Изврат поганый! ;-) Не говоря уже о работе и учебе... Не. Я конечно разберусь, но времени уйдет - мама, не горюй! Буду дико благодарен за как можно более развернутый ответ. Мне нужно просто узнать название процессора и тактовую частоту.

_________________
I L.A.W. you, baby!
For a GNU dawn! For freedom! :-)


 

Member
Статус: Не в сети
Регистрация: 13.08.2005
Люди! Не теряйтесь! Подсказывайте!
Добавлено спустя 8 часов, 31 минуту, 21 секунду
Люди не теряйтесь!!!

_________________
I L.A.W. you, baby!
For a GNU dawn! For freedom! :-)


 

Member
Статус: Не в сети
Регистрация: 14.01.2004
Откуда: Киев, Украина
Частота:
Код:
//CPU frequency calculation
function cCPUid.GetCpuTSCFrequency: Double;
var
  BeforeSleep, AfterSleep, lpFrequency: int64;
  TimerHi, TimerLo: DWORD;
  lRdtscS,lRdtscE: ULARGE_INTEGER;
  TickCount: DWord;
  i: integer;
  TmpProcAff, TmpSysAff: DWord; //Affinity masks: process, system, and provisional PAM
begin
try
  SetPriorityClass(GetCurrentProcess, HIGH_PRIORITY_CLASS);

  asm
    rdtsc
    mov TimerLo, eax
    mov TimerHi, edx
  end;

  lRdtscS.HighPart:=TimerHi;
   lRdtscS.LowPart:=TimerLo;
  TimerHi:=0;
  TimerLo:=0;
 
  TickCount:=GetTickCount;

  QueryPerformanceCounter(BeforeSleep);

  asm
    mov     ecx, 1312D00h
    @Cycle:
      mov     eax, 1E9E4h
      mov     ebx, 5C2h
      imul    ebx
      dec     ecx
      jnz     @Cycle
  end;


  QueryPerformanceCounter(AfterSleep);

  asm
    rdtsc
    mov TimerLo, eax
    mov TimerHi, edx
  end;

  QueryPerformanceFrequency(lpFrequency);

  lRdtscE.HighPart:=TimerHi;
   lRdtscE.LowPart:=TimerLo;

  SetPriorityClass(GetCurrentProcess, NORMAL_PRIORITY_CLASS);

  result:=lpFrequency*(lRdtscE.QuadPart - lRdtscS.QuadPart)/((AfterSleep-BeforeSleep)*1000000);
  except end;
end;

Самый работающий код :-)

_________________
Ку ку


 

Member
Статус: Не в сети
Регистрация: 13.08.2005
Daemon писал(а):
Самый работающий код

И он у меня уже есть. Но мне нужно на ассемблере. :-) Ну на ассмеблер я еще могу это перевести. А вот найти таблицу с CPUID для амд-шных процов никак не найду.

И еще - как определить объем оперативки в ассемблере?

_________________
I L.A.W. you, baby!
For a GNU dawn! For freedom! :-)


 

Advanced member
Статус: Не в сети
Регистрация: 30.08.2003
Откуда: Санкт-Петербург
Цитата:
А вот найти таблицу с CPUID для амд-шных процов никак не найду.

Интел
AMD
Цитата:
Но мне нужно на ассемблере.

ну, дык, основные куски кода на асме в виде вставой даны... Остается только копипейстнуть в свою программу.. ну, чесслово, что за лентяи пошли?
Цитата:
как определить объем оперативки в ассемблере?

под какой осью?

_________________
{:€ дед в законе :-) нородный окодемег
почетный пользователь OpenSuSE 11.3
Ремонт и модернизация ноутбуков IBM (Lenovo) ThinkPad


 

Member
Статус: Не в сети
Регистрация: 14.01.2004
Откуда: Киев, Украина
Цитата:
как определить объем оперативки в ассемблере?
Если под ХР - то только через APIшные ф-ции винды.

_________________
Ку ку


 

Member
Статус: Не в сети
Регистрация: 25.01.2003
Откуда: UA
http://cp.people.overclockers.ru/cgi-bi ... cptest.zip
Цитата:
Опеределялка CPU. распознавание всего вплоть до первых P4/athlon. АБСОЛЮТНО ТОЧНОЕ определение частоты любых камней(начиная с 8088), размер 1.5кб +src

Добавлено спустя 5 минут, 29 секунд
Для A64 и prescott найти нужные значения cpuid и прописать соотвествующие стринги..


 

Member
Статус: Не в сети
Регистрация: 09.11.2004
L.A.W.
Команда:
CPUID
Назначение:
Идентификация процессора
Процессор:
80486

CPUID сообщает информацию о производителе, типе и модификации процессора, о наличии и поддержке различных расширений. Команда CPUID поддерживается Intel, начиная с процессоров Intel 80486DX/SX/DX2 SL, UMC U5S, Cyrix M1, AMD 80486DX4. Чтобы проверить, поддерживает ли процессор эту команду, попробуйте установить флаг ID в 1 (бит 21 в регистре EFLAGS) — если это получается, значит, команда CPUID поддерживается.

Результат работы CPUID зависит от значения регистра ЕАХ. Если ЕАХ = 0, CPUID возвращает в ЕАХ максимальное значение, с которым ее можно вызывать (2 для Р6, 1 для Р5), а регистры EBX:ECX:EDX содержат 12-байтную строку — идентификатор производителя:
Производитель Строка в ЕВХ:ЕСХ:ЕРХ
Intel GenuineIntel
UMC UMC UMC UMC
Cyrix CyrixInstead
AMD AuthenticAMD
NexGen NexGenDriven
Centaur Technology CentaurHalls

Например, для процессоров Intel регистр ЕВХ содержит «Genu» (756E6547h), ЕСХ содержит «ineI» (49656E69h), a EDX — «ntel» (6C65746Eh).

Если ЕАХ = 1, CPUID возвращает в ЕАХ информацию о версии процессора, а в EDX — информацию о поддерживаемых расширениях. Многие понятия в этом описании относятся к работе процессора в защищенном режиме и рассмотрены ниже.

Биты 3 – 0 ЕАХ — Модификация.

Биты 7 – 4 ЕАХ — Модель.

Биты 11 – 8 ЕАХ — Семейство (3 для 386, 4 для 486, 5 для Pentium, 6 для Pentium Pro).

Биты 13 – 12 ЕАХ — Тип (0 — OEM, 1 — Overdrive, 2 — Dual).

Биты 31 – 14 ЕАХ зарезервированы и равны нулю.

Бит 0 EDX — «FPU» Процессор содержит FPU и может выполнять весь набор команд 80387.

Бит 1 EDX — «VME» Процессор поддерживает усовершенствованный режим V86 (флаги VIF и VIP в EFLAGS, биты VME и PVI в CRO).

Бит 2 EDX — «DE» Процессор поддерживает точки останова по вводу/выводу, бит DE в CR0.

Бит 3 EDX — «PSE» Процессор поддерживает страницы до 4 Мб, бит PSE в CR4, модифицированные биты в элементах списков страниц (РDЕ) и таблиц страниц (РТЕ).

Бит 4 EDX — «TSC» Процессор поддерживает команду RDTSC и бит TSC в CR4.

Бит 5 EDX — «MSR» Процессор поддерживает команды RDMSR и WRMSR и машинно-специфичные регистры, совместимые с Pentium.

Бит 6 EDX — «РАЕ» Процессор поддерживает физические адреса больше 32 бит, дополнительный уровень в таблицах трансляции страниц, страницы по 2 Мб и бит РАЕ в CR4. Число бит для физических адресов зависит от модели процессора. Так, Pentium Pro поддерживает 36 бит.

Бит 6 EDX — «РТЕ» (только для Cyrix).

Бит 7 EDX — «МСЕ» Процессор поддерживает бит МСЕ в CR4.

Бит 8 EDX — «СХ8» Процессор поддерживает команду CMPXCHG8B.

Бит 9 EDX — «APIC» Процессор содержит встроенный контроллер прерываний (APIC), и он активирован и доступен.

Бит 9 EDX — «PGE» (только для AMD).

Бит 10 EDX зарезервирован.

Бит 11 EDX — «SEP» Процессор поддерживает быстрые системные вызовы, команды SYSENTER и SYSEXIT (Pentium II).

Бит 12 EDX — «MTRR» Процессор поддерживает машинно-специфичные регистры MTRR.

Бит 13 EDX — «PGE» Процессор поддерживает бит PGE в CR4 и глобальные флаги в PTDE и РТЕ, указывающие элементы TLB, которые принадлежат сразу нескольким задачам.

Бит 14 EDX — «МСА» Процессор поддерживает машинно-специфичный регистр MCG_CAP.

Бит 15 EDX — «CMOV» Процессор поддерживает команды CMOVcc и (если бит 0 EDX установлен) FCMOVcc (Pentium Pro).

Бит 16 EDX — «PAT» Процессор поддерживает таблицу атрибутов страниц.

Биты 17 – 22 зарезервированы.

Бит 23 EDX — «ММХ» Процессор поддерживает набор команд ММХ.

Бит 24 EDX — «FXSR» Процессор поддерживает команды быстрого чтения/записи (ММХ2).

Биты 31 – 25 EDX зарезервированы.

Если ЕАХ = 2, CPUID на процессорах семейства Р6 возвращает в регистрах ЕАХ, ЕВХ, ЕСХ и EDX информацию о кэшах и TLB. Самый младший байт ЕАХ (регистр AL) указывает, сколько раз надо вызвать CPUID с ЕАХ = 2, чтобы получить информацию обо всех кэшах (1 для Pentium Pro и Pentium II). Самый старший бит (бит 31) каждого регистра указывает, содержит ли этот регистр правильную информацию (бит 31 = 0) или он зарезервирован (бит 31 = 1). В первом случае регистр содержит информацию в 1-байтных дескрипторах со следующими значениями:

00h — Пустой дескриптор.

01h — TLB команд, 4-килобайтные страницы, 4-сторонняя ассоциативность, 32 элемента.

02h — TLB команд, 4-мегабайтные страницы, 4-сторонняя ассоциативность, 4 элемента.

03h — TLB данных, 4-килобайтные страницы, 4-сторонняя ассоциативность, 64 элемента.

04h — TLB данных, 4-мегабайтные страницы, 4-сторонняя ассоциативность, 8 элементов.

06h — Кэш команд, 8 Кб, 4-сторонняя ассоциативность, 32 байта в строке.

08h — Кэш команд, 16 Кб, 4-сторонняя ассоциативность, 32 байта в строке.

0Ah — Кэш данных, 8 Кб, 2-сторонняя ассоциативность, 32 байта в строке.

0Ch — Кэш данных, 16 Кб, 2-сторонняя ассоциативность, 32 байта в строке.

41h — Унифицированный кэш, 128 Кб, 4-сторонняя ассоциативность, 32 байта в строке.

42h — Унифицированный кэш, 256 Кб, 4-сторонняя ассоциативность, 32 байта в строке.

43h — Унифицированный кэш, 512 Кб, 4-сторонняя ассоциативность, 32 байта в строке.

44h — Унифицированный кэш, 1 Мб, 4-сторонняя ассоциативность, 32 байта в строке.

Совместимые с Intel процессоры AMD и Cyrix поддерживают вызов «расширенных функций» CPUID со значениями ЕАХ, в которых самый старший бит всегда установлен в 1.

ЕАХ = 80000000h: Возвращает в ЕАХ максимальный номер расширенной функции CPUID, поддерживаемой данным процессором.

ЕАХ = 80000001h: Возвращает в ЕАХ 051Xh для AMD K5 (X — номер модификации) или 061Хh для AMD К6. В EDX эта функция возвращает информацию о поддерживаемых расширениях (указаны только флаги, отличающиеся от CPUID с ЕАХ = 1).

Бит 5 EDX «MSR» — Процессор поддерживает машинно-специфичные регистры, совместимые с К5.

Бит 10 EDX — Процессор поддерживает команды SYSCALL и SYSRET.

Бит 16 EDX — Процессор поддерживает команды FCMOVcc.

Бит 24 EDX — Процессор поддерживает ММХ с расширениями от Cyrix.

Бит 25 EDX — Процессор поддерживает набор команд AMD 3D.

ЕАХ = 80000002h, 80000003h и 80000004h — последовательный вызов CPUID с этими значениями в ЕАХ возвращает в EAX:EBX:ECX:EDX последовательно четыре 16-байтные части строки — имени процессора. Например: «AMD-K5(tm) Processor».

ЕАХ = 80000005h — Команда возвращает информацию о TLB в регистре ЕВХ (старшее слово — TLB данных, младшее слово — TLB команд, старший байт — ассоциативность, младший байт — число элементов), о кэше данных в регистре ЕСХ и о кэше команд в регистре EDX (биты 31 – 24 — размер в килобайтах, биты 23 – 16 — ассоциативность, биты 15 – 8 — число линий на тэг, биты 7 – 0 — число байт на линию.


 

Member
Статус: Не в сети
Регистрация: 14.01.2004
Откуда: Киев, Украина
CCCP очень полезно :D
http://sandpile.org/ia32/cpuid.htm и то, там далеко не все.

_________________
Ку ку


 

Member
Статус: Не в сети
Регистрация: 09.11.2004
To Daemon

L.A.W.
Цитата:
модель процессора (для процов от AMD)


Цитата:
ЕАХ = 80000002h, 80000003h и 80000004h — последовательный вызов CPUID с этими значениями в ЕАХ возвращает в EAX:EBX:ECX:EDX последовательно четыре 16-байтные части строки — имени процессора


Этого не надо ? И вообще-то не указано для процессоров какого поколения это все делается. А по данной вами ссылочке все тоже самое только битовые значения другие (и то для новых моделей).
Добавлено спустя 18 минут, 41 секунду
L.A.W.
Вот рабочая программа (полностью на ассемблере для вычисления частоты процессора) - результат выводится на экран. (Работает в MSDOS,NTVDM).
Код:
.model small
.386
.stack 64
.data
; Массив для сохранения значений отсчетов счетчика
; тактов в моменты срабатывания системного таймера
TimeCounter DD 17 DUP(?)
; Разность между соседними замерами
DeltaT DD 16 DUP(?)
; Среднее значение длительности интервала
AverageTime DD ?
; Предыдущее значение системного таймера
Time DD ?
; Частота процессора

msg db   10,13,'CPU FREQUENCY (MHZ):$'
buffer label byte

.code
main proc far
        mov     AX,@data
        mov     DS,AX

   mov    ah,09h
   lea    dx,msg
   int    21h

; Настроить сегментный регистр ES на область данных BIOS
        mov     AX,0
        mov     ES,AX

; Инициализировать переменные
        mov     EAX,[ES:046Ch]
        mov     [Time],EAX

        ; Процедура, ожидающая изменения таймера
        call    WaitTimer

; Замерить начальные моменты для 17 интервалов
        mov     BX,17
        mov     DI,offset TimeCounter
@@t0:   call    WaitTimer

        ;Команда RDTSC
        DB      0Fh,31h

        mov     [DI],EAX
        add     DI,4
        dec     BX
        jnz     @@t0

; Вычислить длительность 16 интервалов в тактах
        mov     BX,16
        mov     DI,offset TimeCounter
        mov     SI,offset DeltaT
        mov     EDX,0
        ; Из значения счетчика в момент t+1
        ; вычитаем значение в момент t
@@t1:   mov     EAX,[DI+4]
        sub     EAX,[DI]   
        mov     [SI],EAX
        add     EDX,EAX ;накопление суммы значений
        add     DI,4
        add     SI,4
        dec     BX
        jnz     @@t1
; Вычислить среднюю длительность интервала
        shr     EDX,4   ;деление на 16
        mov     [AverageTime],EDX


; Отобразить тактовую частоту процессора

; Умножить среднее значение на частоту генератора системного таймера
        mov     EAX,[AverageTime]
        mov     EDX,1193180
        mul     EDX

; Разделить результат на коэффициент пересчета системного таймера 65536
        shrd    EAX,EDX,16
       
; Вычислить частоту в МГц (разделить на 1000000)
        xor     EDX,EDX
        mov     EBX,1000000       
        div     EBX
     
   mov    ebx,10      
   mov    cx,0
   lea    di,buffer   
   call    convert
       


; Здесь ваши дальнейшие команды

; Выход в DOS
        mov     AX,4C00h
        int     21h
main endp


; Процедура, ожидающая изменения таймера

WaitTimer proc near
        mov     EAX,[Time]
@@T:    cmp     EAX,[ES:046Ch]
        je      @@T
        mov     EAX,[ES:046Ch]
        mov     [Time],EAX
        ret
WaitTimer endp

convert proc near   
a3:     
xor edx,edx                   
div  ebx               
dec  di                   
mov  [di],dl                 
inc  cx                     
cmp eax,0                
jne  a3     
       
a4:                                    
mov  dl,[di]                  
add  dl,48
mov [di],dl
mov ah,02h
int 21h              
inc  di                 
loop a4
ret
convert endp

END main

Компиляция в tasm:
tasm [name]
tlink [name]


Показать сообщения за:  Поле сортировки  
Начать новую тему Новая тема / Ответить на тему Ответить  Сообщений: 14 
-

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 12


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Перейти:  
Создано на основе phpBB® Forum Software © phpBB Group
Русская поддержка phpBB | Kolobok smiles © Aiwan