Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Определить тип процессора 
:(
    Опции темы
Князь
Дата 11.5.2008, 13:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Помогите!Нужно написать прогу,которая должна определять тип процессора.Должна быть написана на С++ с ассемблерной вставкой, т.е. весь код асм,но в С++
PM MAIL   Вверх
W4FhLF
Дата 11.5.2008, 14:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


found myself
****


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

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





--------------------
"Бог умер" © Ницше
"Ницше умер" © Бог
PM ICQ   Вверх
Князь
Дата 12.5.2008, 12:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



написал вот что:
Код


#include<stdio.h>

#define REG_EAX reg[0]
#define REG_EBX reg[1]
#define REG_ECX reg[3]
#define REG_EDX reg[2]

void cpuid(void);
int reg[5];
char *vendor;

int main(int argc,char argv[])
{
 reg[5]=0;

 REG_EAX=0;
 cpuid();
 vendor=(char *)REG_EDX;
 printf("Vendor: %s\n",vendor);

 REG_EAX=1;
 cpuid();

 printf("Family: %i\n",(REG_EAX & 0xF00)>>8);  //EAX bits 11-8
 printf("Model: %i\n",(REG_EAX & 0xF0)>>4);    //EAX bits 7-4
 printf("Stepping: %i\n",(REG_EAX & 0xF));     //EAX bits 3-0

 printf("Type: ");

 switch((REG_EAX & 0x3000)>>12)
   {
   case 0:
     printf("OEM\n");
     break;

   case 1:
     printf("Overdrive\n");
     break;

   case 2:
     printf("Dual\n");
     break;
   }
}
void cpuid()
{
  asm{"cpuid":
    "=a"(REG_EAX),
    "=b"(REG_EBX),
    "=c"(REG_ECX),
    "=d"(REG_EDX):
    "a"(REG_EAX)}
}



выдает ошибку на cpuid что можно сделать с этим?


Это сообщение отредактировал(а) Князь - 12.5.2008, 12:57
PM MAIL   Вверх
MAKCim
Дата 12.5.2008, 18:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



Князь
компилятор какой? что за ошибка?


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

PM MAIL   Вверх
Князь
Дата 13.5.2008, 09:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



пишет что не инициализированы a,b,c,d.Но если инициализировать их int либо char говорит Expresssion syntax в процедуре cpuid

Turbo C++ Version 3.0
PM MAIL   Вверх
MAKCim
Дата 14.5.2008, 11:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



Князь
синтаксис ассемблерной вставки напоминает тот, который применяется в GCC
пробуй так
Код

void cpuid()
{
  asm {
      mov eax, REG_EAX
      cpuid
      mov REG_EAX, eax
      mov REG_EBX, ebx
      mov REG_ECX, ecx
      mov REG_EDX, edx
  }
}



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

PM MAIL   Вверх
Князь
Дата 15.5.2008, 07:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



пишет Undefined symbol eax,ebx,ecx,edx

Такое ощущение что он вовсе не замечает asm

Это сообщение отредактировал(а) Князь - 15.5.2008, 07:41
PM MAIL   Вверх
Князь
Дата 15.5.2008, 11:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



попробовал написать еще вот так

Код

#include<stdio.h>

#define REG_EAX reg[0]
#define REG_EBX reg[1]
#define REG_ECX reg[3]
#define REG_EDX reg[2]

void cpuid(void);
int reg[5];
char *vendor;

int main(int argc,char argv[])
{
 reg[5]=0;

 REG_EAX=0;
 cpuid();
 vendor=(char *)REG_EDX;
 printf("Vendor: %s\n",vendor);

 REG_EAX=1;
 cpuid();

 printf("Family: %i\n",(REG_EAX & 0xF00)>>8);  //EAX bits 11-8
 printf("Model: %i\n",(REG_EAX & 0xF0)>>4);    //EAX bits 7-4
 printf("Stepping: %i\n",(REG_EAX & 0xF));     //EAX bits 3-0

 printf("Type: ");

 switch((REG_EAX & 0x3000)>>12)
   {
   case 0:
     printf("OEM\n");
     break;

   case 1:
     printf("Overdrive\n");
     break;

   case 2:
     printf("Dual\n");
     break;
   }
}
void cpuid()
{
asm{mov ax,REG_EAX
       cpuid
       mov REG_EAX,ax
       mov REG_EBX,bx
       mov REG_ECX,cx
       mov REG_EDX,dx
       }
}


т.к. мне сказали что может не работать из-за несовпадения количества регистров,но в строке  asm{mov ax,REG_EAX выдает ошибку 

Invalid combination of opcode and operation

Это сообщение отредактировал(а) Князь - 15.5.2008, 11:41
PM MAIL   Вверх
Князь
Дата 20.5.2008, 09:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Что никто не знает?Очень нужно,помогите
PM MAIL   Вверх
MAKCim
Дата 20.5.2008, 09:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



Князь
посмотри в документации по Turbo C++,  как там нужно использовать ассемблерные вставки


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

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

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

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


 




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


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

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