IPB
ЛогинПароль:

> ПРАВИЛА РАЗДЕЛА!!!

1. Заголовок или название темы должно быть информативным
2. Все тексты программ должны помещаться в теги [CODE=asm] [/CODE]
3. Прежде чем задавать вопрос, см. "FAQ",если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно, такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Ассемблера. Исключение только с согласия модератора.
5. НЕ используйте форум для личного общения! Все, что не относиться к обсуждению темы - на PM!
6. Проверяйте программы перед тем, как выложить их на форум!!

> Тактовая частота процессора, как её определять?
guf
сообщение 9.11.2008 23:59
Сообщение #1


Новичок
*

Группа: Пользователи
Сообщений: 28
Пол: Мужской

Репутация: -  0  +


Объясните как определить тактовую частоту процессора(uses tasm под консоль), лучше кодом. Долго искал, ничего путнего не нашел.


--------------------
Плагины для FL Studio и Pro Tools
Учусь на ошибках компилятора...
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов(1 - 7)
volvo
сообщение 10.11.2008 0:16
Сообщение #2


Гость






Вот так я делал, когда надо было определять частоту в Асм-модуле, а использовать значение в Паскале:
IDEAL 
P386
LOCALS
MODEL small

SEGMENT sseg para stack 'STACK'
DB 200h DUP (?)
ENDS

DATASEG
  ; Частота процессора (переменная описана в Паскаль-программе)
  EXTRN CPU_Freq:DWORD;

  ; Массив для сохранения значений отсчетов счетчика
  ; тактов в моменты срабатывания системного таймера
  TimeCounter DD 17 DUP(?)

  ; Разность между соседними замерами
  DeltaT DD 16 DUP(?)

  ; Среднее значение длительности интервала
  AverageTime DD ?

  ; Предыдущее значение системного таймера
  Time DD ?
ENDS

CODESEG
  ; к этой процедуре нам необходим доступ из Паскаля
  PUBLIC Frequency

PROC Frequency
  MOV     AX, DGROUP
  MOV     DS, AX

  ; Настроить сегментный регистр 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

@@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
       
  ; Частота процессора переносится в CPU_Freq
  MOV     [CPU_Freq], EAX

  ; Возвращаемся из процедуры
  RET
ENDP Frequency 

; Процедура, ожидающая изменения таймера
PROC WaitTimer near
  MOV     EAX, [Time]
@@T:    CMP     EAX, [ES:046Ch]
  JE      @@T
  MOV     EAX,[ES:046Ch]
  MOV     [Time],EAX
  RET
ENDP WaitTimer

ENDS
END
Кое-что поправить, и можно будет работать только с Асм-ом... Справишься?
 К началу страницы 
+ Ответить 
guf
сообщение 10.11.2008 21:12
Сообщение #3


Новичок
*

Группа: Пользователи
Сообщений: 28
Пол: Мужской

Репутация: -  0  +


Спасибо большое, volvo. Только у меня один вопрос - как использоавть в своей программе 64-битные регистры?
У меня TASM ругается на них, пишет типа "undefineid symbol eax".


--------------------
Плагины для FL Studio и Pro Tools
Учусь на ошибках компилятора...
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 10.11.2008 21:29
Сообщение #4


Гость






Цитата
как использоавть в своей программе 64-битные регистры?
У меня TASM ругается на них, пишет типа "undefineid symbol eax".
blink.gif А где ты нашел тут 64-битные регистры? EAX - 32 битный вообще-то... Какая версия компилятора? Мой досовский TASM 3.0 нормально компилирует:

Цитата(Console)
G:\Asm30>tasm /z/zi/l freq
Turbo Assembler Version 3.0 Copyright © 1988, 1991 Borland International

Assembling file: freq.ASM
Error messages: None
Warning messages: None
Passes: 1
Remaining memory: 419k
 К началу страницы 
+ Ответить 
guf
сообщение 10.11.2008 21:51
Сообщение #5


Новичок
*

Группа: Пользователи
Сообщений: 28
Пол: Мужской

Репутация: -  0  +


Упс, значит не 64 бита smile.gif Твой код, что компилирует я не спорю. Все нормально, версия 4.1 у меня. Просто моем коде когда использую EAX компилятор ругается

Вот например:
Код
TITLE SystemRevision
JUMPS
.model SMALL

.data;описание данных
...

.code
.8086
start:
    mov AX,@DATA        ; установка в ds адpеса
    mov DS, AX          ; сегмента данных

...
mov EAX, [ES:046Ch]
....
end start


В итоге:
Код
Turbo Assembler     Version 4.1        10/11/08 21:38:11        Page 21
Error Summary
SystemRevision


    mov    eax,10h
**Error** System.asm(93) Undefined symbol: EAX


Не понимаю почему нельзя работать с EAX, EDX и т.п.


--------------------
Плагины для FL Studio и Pro Tools
Учусь на ошибках компилятора...
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 10.11.2008 22:12
Сообщение #6


Гость






Цитата
Не понимаю почему нельзя работать с EAX, EDX и т.п.
Ну ты ж сам запретил:

Цитата
.code
.8086 ; <--- Вот тут
, в режиме 8086 нельзя работать с расширенными регистрами, не было их тогда еще... А вот с .386 должно работать
 К началу страницы 
+ Ответить 
guf
сообщение 10.11.2008 23:33
Сообщение #7


Новичок
*

Группа: Пользователи
Сообщений: 28
Пол: Мужской

Репутация: -  0  +


Спасибо, все отлично работает теперь!
Ты случайно не знаешь как узнать название процессора? Оно вроде где-то в памяти хранится...


--------------------
Плагины для FL Studio и Pro Tools
Учусь на ошибках компилятора...
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 11.11.2008 0:45
Сообщение #8


Гость






Intel -> CPUID--CPU Identification
 К началу страницы 
+ Ответить 

 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 

- Текстовая версия 29.07.2025 20:24
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"