Форум программистов, компьютерный форум, киберфорум
Наши страницы
Visual Basic .NET
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.63/8: Рейтинг темы: голосов - 8, средняя оценка - 4.63
Irpen Zigrin
0 / 0 / 0
Регистрация: 07.06.2013
Сообщений: 8
1

Используя команду cpuid, определить количество логических процессоров

28.04.2015, 09:43. Просмотров 1579. Ответов 4
Метки нет (Все метки)

Помогите пожалуйста с это задачей, особенно с пунктом про логический процессор:

Используя команду cpuid, определить количество логических процессоров.
ИспользуяRegOpenKey, RegQueryValueEx, RegCloseKey, определить
модификацию процессора
(HKEY_LOCAL_MACHINE\HARDWARE\DESCRIPTION\System\CentralProcessor\
0).

vb.net
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
Public Class Form1
    Private Declare Sub GetCPU Lib "dllCPU.dll" Alias "getcpu" (ByRef a As Long, ByRef b As Long, _
                                                                ByRef c As Long, ByRef d As Long)
    Private Declare Function RegOpenKey Lib "advapi32.dll" Alias "RegOpenKeyA" (ByVal hkey As Integer, _
                                                                                ByVal ipSubKey As String, _
                                                                                ByRef phkRosalt As Integer) As Integer
    Private Declare Function RegQueryValue Lib "advapi32.dll" Alias "RegQueryValueExA" (ByVal hkey As Integer, _
                                                                                      ByVal ipValueName As String, _
                                                                                      ByVal ipReserved As Integer, _
                                                                                      ByVal ipType As Integer, _
                                                                                      ByVal ipData As String, _
                                                                                      ByRef ipcbData As Integer) As Integer
    Private Declare Function RegCloseKey Lib "advapi32.dll" Alias "RegCloseKey" (ByVal hkey As Integer) As Integer
    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        Dim a1 As Long
        Dim b1 As Long
        Dim c1 As Long
        Dim d1 As Long
        Dim s As String
        a1 = Convert.ToInt32(TextBox1.Text)
        GetCPU(a1, b1, c1, d1)
        Label1.Text = "Eax: " + a1.ToString
        Label2.Text = "Ebx: " + b1.ToString
        Label3.Text = "Ecx: " + c1.ToString
        Label4.Text = "Edx: " + d1.ToString
        s = Convert.ToString(b1, 2)
        s = Strings.Mid(s, 1, 3)
        s = Convert.ToInt32(s, 2)
        Label5.Text = s
    End Sub
Вот то, что я написал(скопировал), но преподаватель сказал, что это "порнография какая-то"))
0
QA
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
28.04.2015, 09:43
Ответы с готовыми решениями:

Определить модель процессора, используя команду cpuid
Определить модель процессора, используя команду cpuid. Используя RegOpenKey, RegQueryValueEx,...

Используя команду cpuid, определить размер КЭШа команд первого уровня
Используя команду cpuid, определить размер КЭШа команд первого уровня. Возможно у кого-то есть...

Используя функцию GetSystemInfo определить количество процессоров
Используя функцию GetSystemInfo определить количество процессоров Вот что имею. выдает 0...

Используя cpuid, определить размер кеша второго уровня
Здесь выводить маркировка , а нужно вывести размер кеша 2-ого уровня. Помогите пожалуйста , вот код...

Определить количество процессоров
помогите пожалуйста ((( Используя RegOpenKey, RegQueryValueEx, RegCloseKey, определить количество...

4
Irpen Zigrin
0 / 0 / 0
Регистрация: 07.06.2013
Сообщений: 8
01.11.2015, 18:49  [ТС] 2
Вот рабочий вариант этой задачи. Работает только на процессорах Intel, т.к. инструкции cpuid не в полном объёме работают на процессорах AMD

vb.net
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
Public Class Form1
    Dim i As Integer
    Dim a As String
    Dim b As String
    Private Declare Function RegOpenKey Lib "advapi32.dll" Alias "RegOpenKeyA" (ByVal hkey As Integer, ByVal lpSubkey As String, ByRef phkRezult As Integer) As Integer 'открывает существующий раздел, чтобы получить доступ к данным
    Private Declare Function RegQueryValue Lib "advapi32.dll" Alias "RegQueryValueExA" (ByVal hkey As Integer, ByVal valuename As String, ByVal lpRezerved As Integer, ByVal lpType As Integer, ByVal lpData As String,
                                                                                         ByRef lpcbData As Integer) As Integer 'Функция для считывания значения параметра из реестра 
 
    Private Declare Function RegCloseKey Lib "advapi32.dll" (ByVal hkey As Integer) As Integer 'открытый подраздел необходимо закрыть. Это выполняет – RegCloseKey.
 
    Private Sub key(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        Dim hkey As Integer     'hKey- дескриптор открытого подраздела
        Dim SData As String     'sData– считываем значение параметра
        Dim lres As Integer     'lres результат работы функции
        Dim lDlen As Integer    'lDlen отвечает за размер строки
        Dim Subkey As String    'SubKey это подраздел который мы хотим открыть
        Subkey = "HARDWARE\DESCRIPTION\System\CentralProcessor\0"
        lres = RegOpenKey(&H80000002, Subkey, hkey)
        If lres <> 0 Then
            MsgBox("Ошибка")
            End
        End If
        SData = Space(255)
        lDlen = Len(SData)
        lres = RegQueryValue(hkey, "Identifier", 0, 0, SData, lDlen)
        If lres <> 0 Then
            MsgBox("Ошибка")
        Else : TextBox1.Text = Strings.Mid(SData, 26, 10)
        End If
        lres = RegCloseKey(hkey)
    End Sub
    Private Declare Sub GetCPU Lib "dllCpu.dll" Alias "getcpu" (ByRef a As Long, ByRef b As Long, ByRef c As Long, ByRef d As Long)
    Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
        Dim a1 As Long
        Dim b1 As Long
        Dim c1 As Long
        Dim d1 As Long
        Dim S As String
        a1 = Convert.ToInt32(TextBox2.Text)
        GetCPU(a1, b1, c1, d1)
        Label2.Text = "EAX=" + a1.ToString()
        Label3.Text = "EBX=" + b1.ToString()
        Label4.Text = "ECX=" + c1.ToString()
        Label5.Text = "EDX=" + d1.ToString()
        Label7.Text = Convert.ToString(a1, 2)
        S = Label7.Text
        S = Strings.Mid(S, 15, 8)
        'S = Convert.ToInt32(S, 2)
        'Label8.Text = S
        For Me.i = 1 To 8
            a = Mid(S, i, 1)
            If a > 0 Then
                b = 2 ^ (i - 1)
            End If
        Next
        Label8.Text = b
    End Sub
 
 
End Class
0
gleb414
0 / 0 / 2
Регистрация: 05.01.2015
Сообщений: 74
12.11.2016, 19:28 3
Строка 39 - Входная строка имела неверный формат
0
OwenGlendower
Супер-модератор
Эксперт .NET
11507 / 9690 / 4067
Регистрация: 17.03.2014
Сообщений: 19,333
Записей в блоге: 1
Завершенные тесты: 2
12.11.2016, 22:25 4
gleb414, значит в textbox2 ничего не введено или введена строка которую нельзя преобразовать в integer. Нужно ввести туда "0" или "1" (CPUID). Только боюсь тебе это не сильно поможет потому что дальше ты получишь ошибку что отсутствует файл dllCPU.dll. Насколько я понимаю там у ТС как раз и был вызов инструкции CPUID. Тебе необходимо написать эту dll с экспортируемым методом getcpu (
Calling the __cpuid MSVC function via C# a DLL Pinvoke (C++, C#)) или же написать вызов инструкции cpuid на vb.net. На stackoverflow есть пример на C# - x86/x64 CPUID in C#.
0
gleb414
0 / 0 / 2
Регистрация: 05.01.2015
Сообщений: 74
20.11.2016, 14:48 5
Ругается на 45 строку.

Добавлено через 4 минуты
Не удалось разрешить перегрузку, так как ни один из доступных ToString, не может быть вызван без преобразования, сужающего диапазон значений. Строка 45

Добавлено через 14 минут
Не удается загрузить DLL "dllCpu.dll": Не удалось запустить приложение, поскольку его параллельная конфигурация неправильна. Дополнительные сведения содержатся в журнале событий приложений или используйте программу командной строки sxstrace.exe для получения дополнительных сведений. (Исключение из HRESULT: 0x800736B1). dllcpu.dll положил в папку с проектом.
0
20.11.2016, 14:48
Answers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
20.11.2016, 14:48

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

Как определить семейство процессора, используя команду cpuid?
Здравствуйте! Очень нужна ваша помощь. Как написать ассемблерную вставку для dll библиотеки в C++...

Есть ли в винде ограничения на количество процессоров или ядер процессоров?
Есть ли в винде ограничения на количество процессоров или ядер процессоров? Добавлено через 12...

Функции API. Определить имеющие силу логические диски на компьютере и количество процессоров
Используя функции GetLogicalDriveStrings и GetSystemInfo определить имеющие силу логические диски...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2020, vBulletin Solutions, Inc.