Доброго времени суток, господа! Мне тут подруга подкинула проблем! Через 3 дня (сегодня 4-е декабря) ей нужно сдавать курсовик по системному ПО. А он еще не делался... Одно из заданий - определить тип и основные характеристики процессора. У меня под рукой только учебник Юрова, где эта вещь описана крайне скупо. Люди добрые, подскажите как определить тактовую частоту (для любого проца) и модель процессора (для процов от AMD). Если у кого есть исходник программы типа CPUZ буду благодарен если им со мной поделятся!
_________________ I L.A.W. you, baby!
For a GNU dawn! For freedom!
Это понятно. Но у меня нет справочной информации по результатам работы. Есть только для пней (спасибо Юрову, который, по-моему, вообще не подозревает о существовании AMD).
И насчет частоты по-подробней можно?
_________________ I L.A.W. you, baby!
For a GNU dawn! For freedom!
также отправляю читать даташит на АМД за нумером #20734
Издеваешься, да? Мне за эти дни еще это все нужно сделать резидентным, заставить передваться через DATALINK и все это под XP-хой... Изврат поганый! Не говоря уже о работе и учебе... Не. Я конечно разберусь, но времени уйдет - мама, не горюй! Буду дико благодарен за как можно более развернутый ответ. Мне нужно просто узнать название процессора и тактовую частоту.
_________________ I L.A.W. you, baby!
For a GNU dawn! For freedom!
И он у меня уже есть. Но мне нужно на ассемблере. Ну на ассмеблер я еще могу это перевести. А вот найти таблицу с CPUID для амд-шных процов никак не найду.
И еще - как определить объем оперативки в ассемблере?
_________________ I L.A.W. you, baby!
For a GNU dawn! For freedom!
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).
Бит 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-байтных дескрипторах со следующими значениями:
Совместимые с 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 — число байт на линию.
ЕАХ = 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
; Вычислить длительность 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
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 12
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения