Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 27.04.2013, 23:37   #1
Npwas
Форумчанин
 
Аватар для Npwas
 
Регистрация: 26.09.2011
Сообщений: 158
Вопрос Чтение адреса регистра конфигурации. Шина PCI Express

Суть задачи: чтение значений данных о подключенных устройствах через порты: порт управления CF8 и порт данных СFC;

Хотелось бы знать чем отличается архитектура x64 от x32, и сколько максимально может быть значение bus, device и fubc )

В задании дан пример для x32:
Код:
  for (unsigned long int   bus = 0;      bus < 5;          bus++   )//Номер шины
  for (unsigned long int   device = 0;  device < 32;    device++)//Номер устройства
  for (unsigned long int   func = 0;     func < 8;        func++   )//Номер функция
  {
    unsigned long int a = 0x80000000 + (bus << 16) + (device << 11) + (func << 8);
    unsigned long int r;
asm {
        p386
	      mov	dx, 0xCF8
	      mov	eax,a
	      out	dx,eax
	      mov	dx, 0xCFC
	      in	eax,dx
	      mov	r,eax
    }
}

под x64 я использовал для работы библиотеку winio64.dll и драйвер winio64.sys, работает и читает какие то значения типа:1c3a8086, но не знаю правильно ли это или расположение bus, device и func и их количество отличается на x64 от x32
Код:
    _int16 CtrlP=0xCF8, DataP=0xCFC, Size=4;
    _int64 PrtVal=0xFF;
    for (_int64    bus=0;     bus < 5;      bus++)
    for (_int64    device=0;  device < 32;  device++)
    for (_int64    func=0;    func < 8;     func++)   
        { 
		  _int64  Addr = 0xffffffff80000000 + (bus<<16) + (device<<11) + (func<<8);
          SetPortVal(CtrlP,Addr,Size);
	      GetPortVal(DataP,&PrtVal,Size);
		  if(PrtVal!=0xffffffff)
		    {
			  sprintf_s(buffer,10,"%x",PrtVal);  
			  printf("%x:   %x  %s\n",Addr,PrtVal);//,buffer);
		    }
	    }
<----Весы Там.

Последний раз редактировалось Npwas; 28.04.2013 в 03:13.
Npwas вне форума Ответить с цитированием
Старый 28.04.2013, 08:36   #2
s-andriano
Старожил
 
Аватар для s-andriano
 
Регистрация: 08.04.2012
Сообщений: 3,229
По умолчанию

А под x32 и x64 Вы подразумеваете аппаратную реализацию шины PCI Express или режим работы процессора?
s-andriano вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Преобразовать все буквы нижнего регистра в буквы верхнего регистра druger Помощь студентам 5 18.09.2011 17:27
Чтение регистров конфигурационного блока устройства PCI Napkin Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 1 19.02.2011 10:52
не могу установить 3g модема pci-express mini? ww01031977 Компьютерное железо 0 25.06.2010 14:38
Чтение с адреса aktivizion Общие вопросы Delphi 3 23.04.2010 17:18
PCI. Чтение множества данных подряд Min Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 0 07.04.2009 03:40