Модераторы: Daevaorn

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Использование rdtsc в DOS??? 
:(
    Опции темы
kostyantmb
Дата 19.9.2005, 16:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Можно ли в Borland C++ 3.11 for DOS использовать rdtsc для последующего определения с помощью неё тактовой частоты процессора???
Если можно, то как?
PM MAIL   Вверх
_hunter
Дата 19.9.2005, 16:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 8564
Регистрация: 24.6.2003
Где: Europe::Ukraine:: Kiev

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



можно.
точно так же как и под окнами...
xor eax, eax
CPUID
RDTSC
mov [clock], EAX
...
xor eax, eax
CPUID
RDTSC
SUB eax, [clock]


--------------------
Tempora mutantur, et nos mutamur in illis...
PM ICQ   Вверх
SergeCpp
Дата 19.9.2005, 17:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


 
**


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

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



В окне Win9x — вылетать будет...

Я так пробовал.
PM MAIL WWW ICQ   Вверх
_hunter
Дата 19.9.2005, 18:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 8564
Регистрация: 24.6.2003
Где: Europe::Ukraine:: Kiev

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



видать не так пробовал -- ничего не вылетало...



--------------------
Tempora mutantur, et nos mutamur in illis...
PM ICQ   Вверх
SergeCpp
Дата 20.9.2005, 06:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


 
**


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

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



Имеется в виду программа DOS (Multi-Edit)

Если туда ставишь RDTSC, то в окне Win9x - недопустимая команда

Win9x — не NT-based system

Конкретно — Millennium

Что там не так можно сделать — два байта команда (и всё)
PM MAIL WWW ICQ   Вверх
_hunter
Дата 20.9.2005, 10:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 8564
Регистрация: 24.6.2003
Где: Europe::Ukraine:: Kiev

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



что за "программа DOS (Multi-Edit)"?

насчет линолеума -- не знаю, но в универе под 98-й без проблем шло...
+ под 2000 (и ХР), который гораздо строже относятся к подобным коммандам тоже все без проблем работает...


--------------------
Tempora mutantur, et nos mutamur in illis...
PM ICQ   Вверх
SergeCpp
Дата 20.9.2005, 12:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


 
**


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

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



Multi-Edit for DOS Version 7.00 Professional

released 1993
PM MAIL WWW ICQ   Вверх
_hunter
Дата 20.9.2005, 13:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 8564
Регистрация: 24.6.2003
Где: Europe::Ukraine:: Kiev

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



и о чем это говорит? -- Multi-Edit ( for DOS )-- жуткое крывулище...


--------------------
Tempora mutantur, et nos mutamur in illis...
PM ICQ   Вверх
Crait
Дата 20.9.2005, 14:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



MultiEdit 7 - штука кульная, не нада ляля smile
Вот тока куда в него и как "поставили" инструкцию RDTSC ?? smile

Это сообщение отредактировал(а) Crait - 20.9.2005, 14:48
PM MAIL   Вверх
SergeCpp
Дата 20.9.2005, 15:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


 
**


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

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



Код


void _speed() trans
{
  // save int 17 - BIOS: Parallel Printer

  r_ax = 0x3517;

  intr ( 0x21 );

  int int17seg = r_es;
  int int17ofs = r_bx;

  // save int 18 - BIOS: ROM BASIC Loader

  r_ax = 0x3518;

  intr ( 0x21 );

  int int18seg = r_es;
  int int18ofs = r_bx;

  // set int 17 to reset counter

  str reset[ 15 ] = "\x66\x33\xC0"             \ // xor   edx, edx
                    "\x66\x33\xD2"             \ // xor   eax, eax
                    "\x66\xB9\x10\x00\x00\x00" \ // mov   ecx, 0x10
                    "\x0F\x30"                 \ // wrmsr
                    "\xCF";                      // iret

  r_ax = 0x2517;
  r_ds = seg( reset );
  r_dx = ofs( reset ) + 4;

  intr ( 0x21 );

  // set int 18 to rdtsc

  str rdtsc[ 32 ] = "\x0F\x31"                 \ // rdtsc
                    "\x66\x8B\xD8"             \ // mov   ebx, eax
                    "\x66\xC1\xEB\x10"         \ // shr   ebx, 16
                    "\x66\x8B\xCA"             \ // mov   ecx, edx
                    "\x66\xC1\xEA\x10"         \ // shr   edx, 16
                    "\xCF";                      // iret

  r_ax = 0x2518;
  r_ds = seg( rdtsc );
  r_dx = ofs( rdtsc ) + 4;

  intr ( 0x21 );

  // init

  int hi32  = 0;
  int lo32  = 0;

  int min   = MAX_INT;

  int count = 1000;

  // work init

  int zz_i = 1;
  str zz_s = "";

  while( count-- )
  {
    // reset counter

    intr( 0x17 );

    // work

    zz_s = str( zz_i );

  //~zzz++; // 1770
  //zzz++;  //   60
  //delay( 100 ); // 16,653,405 - 166MHZ

    //rm( "_TEST^_XYZ" );
    //_xyz();
  //zz = xpos( 'x', ln, 1 ); // q - 720, x - 780
  //zz = pos ( 'x', ln    ); // q - 655, x - 667

  //indent_style--;    // 814
  //indent_style -= 1; // 814

    // read counter

    intr( 0x18 );

    hi32 = r_dx << 16 | r_cx;
    lo32 = r_bx << 16 | r_ax;

    if( lo32 < min )
    {
        min  = lo32;
    }

    // work

  //indent_style++;
  }

  // restore int 17

  r_ax = 0x2517;
  r_ds = int17seg;
  r_dx = int17ofs;

  intr ( 0x21 );

  // restore int 18

  r_ax = 0x2518;
  r_ds = int18seg;
  r_dx = int18ofs;

  intr ( 0x21 );

  // done

  make_message( _str( min - 361 ) ); // 336..361..410..439
}


Добавлено @ 15:11
WRMSR я комментировал, знаю, что за штука...
PM MAIL WWW ICQ   Вверх
_hunter
Дата 20.9.2005, 15:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 8564
Регистрация: 24.6.2003
Где: Europe::Ukraine:: Kiev

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



э... и при чем тут этот код?


--------------------
Tempora mutantur, et nos mutamur in illis...
PM ICQ   Вверх
SergeCpp
Дата 20.9.2005, 15:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


 
**


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

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



Вот тока куда в него и как "поставили" инструкцию RDTSC ??


это ответ на вопрос выше
PM MAIL WWW ICQ   Вверх
_hunter
Дата 20.9.2005, 15:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 8564
Регистрация: 24.6.2003
Где: Europe::Ukraine:: Kiev

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



ты, наверное, не заметил, но там кроме этой инструкции есть еще несколько. среди них -- вызов прерывания. если именно этот код ты и вставлял -- ничего удивительного в том, что окна его не пропускали.


--------------------
Tempora mutantur, et nos mutamur in illis...
PM ICQ   Вверх
SergeCpp
Дата 20.9.2005, 16:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


 
**


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

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



Без этой инструкции (если NOP NOP) — всё работало!

Это же мой код — с "нуля".
Добавлено @ 16:51
Да и ругались именно на RDTSC (PC там был — на ней)
PM MAIL WWW ICQ   Вверх
kostyantmb
Дата 21.9.2005, 06:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Дак как это всё-таки на С реализовать???

Там все не так как под окнами, пробовал!

Это сообщение отредактировал(а) kostyantmb - 21.9.2005, 06:30
PM MAIL   Вверх
SergeCpp
Дата 21.9.2005, 06:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


 
**


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

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



функция-вставка на асме

типа

#pragma warning( disable : 4035 ) // no return value

__forceinline DWORD rdtsc()
{
__asm rdtsc // edx:eax
}

#pragma warning( default : 4035 )

DWORD мне хватает...

Если надо hi-dword, думай сам...

это, конечно, VC6, но делай аналогично...
PM MAIL WWW ICQ   Вверх
Страницы: (2) [Все] 1 2 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

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

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


 




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


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

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