vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
vb@rchiv Offline-Reader - exklusiv auf der vb@rchiv CD Vol.4  
 vb@rchiv Quick-Search: Suche startenErweiterte Suche starten   Impressum  | Datenschutz  | vb@rchiv CD Vol.6  | Shop Copyright ©2000-2025
 
zurück

 Sie sind aktuell nicht angemeldet.Funktionen: Einloggen  |  Neu registrieren  |  Suchen

Allgemeine Diskussionen
Re: den cpu speed ermittlen geht das mit VB ?? 
Autor: unbekannt
Datum: 05.01.03 00:56

Hi Atom,

der heißt hier Speed. CPU-Speed.

Noch einen Vorrat:

VBEx32.DLL - SYSTEMFUNKTIONEN

VBSETCPUINFO

Was für die absoluten Profies: Was Ihnen VBGETCPUINFO nicht bringt, Sie aber dennoch benötigen, können Sie mittels dieser Funktion ermitteln. Sie ermöglicht Ihnen, von VB heraus die CPUID - Funktion des Prozessors selbst aufzurufen und die Register auszuwerten. Die Funktion gibt den Inhalt der acht Register in einer Struktur zurück:

Deklaration in VB:

Public Declare Sub VBEX_SetCPUInfo Lib "vbex32.dll" _
Alias "VBSETCPUINFO" ( _
cInfo As CPURegisterInfo, _
ByVal cmd As Long)

' CPURegisterInfo-Struktur
Type CPURegisterInfo
Eax As Long
Ebx As Long
Ecx As Long
Edx As Long
Esi As Long
Edi As Long
Ebp As Long
Esp As Long
End Type
Mittels eines Command-Parameters wird die CPU-Funktion CPUID aufgerufen:

Mov Eax,cmd
CPUID
Mov a,Eax
Mov b,Ebx
Mov c,Ecx
Mov d,Edx
Mov e,Esi
Mov f,Edi
Mov g,Edp
Mov h,Esp
Und somit je nach Command 0 ... 4 die entsprechenden Registerinhalte zur Verfügung gestellt, die Sie auswerten können. Zur Auswertung stellt VBEx32.DLL, wie bereits schon im Beispiel angeführt, die entsprechenden Werkzeuge bereits zur Verfügung. Beachten Sie: Ein AMD hat die Commands: &H8000 - &H8004!. Der AMD ist nur von 0 ... 1 mit dem INTEL gleich. Beachten Sie bitte, dass die Registerinhalte nur im Zusammenhang mit dem CPUID-Befehl Gültigkeit haben und nicht repräsentieren, welche Inhalte die Register zuvor hatten. CPUID überschreibt alle Register!. Wieviele Commands eine CPU verträgt, übergibt Ihnen der CPUID-Parameter in der CPUInfo-Struktur - 1! Erhalten Sie eine 2, demnach die Commands: 0 und/oder 1.

Was nun, wenn der Prozessor eine Identifizierung via Brandstring gestattet? (siehe oben). Sie können den String erhalten: "Intel(R) Pentium(R) 4 CPU 1500 MHz" (kommt doch verdächtig bekannt vor - oder?)

Nun, dieser Prozessor würde die extended Features unterstützen und dessen CPUID-Befehlssatz ist größer als 2. Um diesem Siliziumklotz diesen String zu entlocken, folgendes Beispiel für die VBSETCPUINFO-Funktion:

Private Function GetBrandString() As String
Dim a As String, b As String
Dim cInR As CPURegisterInfo
Dim i As Byte

a = ""
For i = 2 To 4
VBEX_SetCPUInfo cInr,&H8000000 + i
a = a + StrReverse(Hex(cInr.Eax))
a = a + StrReverse(Hex(cInr.Ebx))
a = a + StrReverse(Hex(cInr.Ecx))
a = a + StrReverse(Hex(cInr.Edx))
Next

For i = 1 To Len(a) Step 2
b = b + Chr(Val("&H" & Mid(a,i,2)))
Next

GetBrandString = Trim(b)
End Function
Kann man tun . Keine Ahnung, wieso Intel immer von rechts nach links notiert. Es liegt nämlich folgender Ascii-Code vor:

Edx Ecx Ebx Eax
6e 40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 (cmd 2)
n I
52 28 6d 75 69 74 6e 65 50 20 29 52 28 6c 65 74 (cmd 3)
R ) m u i t n e P ( R ) l e t
00 7a 48 4d 30 30 35 31 20 55 50 43 20 34 20 29 (cmd 4)
z H M 0 0 5 1 U P C 4 (
Während Intel die Sache rechtsbündig macht, macht sie AMD linksbündig, aber auch verdreht, wie Intel.

ProfiTip:
Hat die CPU den Befehlssatz 2 (CPUID > 2) dann haben Sie Zugriff auf die TLB (Cache-Table) des Prozessors. Cmd = 2. Wird dieser Befehl aufgerufen, erhalt man in EAX einen Wert der angibt, wieviel mal dieses Commando noch aufzurufen ist, bis man alle Infos der TLB hat. Die Infos befinden sich dann in den Registern Ebx, Ecx und Edx. Das 31. Bit des jeweiligen Registers symbolisiert mit 0, das der Wert validiert oder 1, wenn er reserviert ist. Z.B. würde ein Code: 66h auf folgendes hindeuten:

1st-level data cache; 8kB,4-way set associative,64 byte line size. (Wird nur von Intel-Prozessoren unterstützt).


Ein komplett Beispiel in VB:

Sie benötigen eine Form, eine Listbox und 2 Commandbutton.

Option Explicit
Private Type CPUInfo
Vendor As String * 12
Speed As Long <--------------------- hier ist der Wert!!! Interessiert eh nur am Rand
FeatureFlags As Long
HasMMX As Long
Has3DNow As Long
HasFPU As Long
HasSerial As Long
IsType As Long
Model As Long
ExtModel As Long
Family As Long
ExtFamily As Long
Stepping As Long
CpuID As Long
BrandIndex As Long
Serial As String * 29
Description As String * 48
End Type

Private Type CPURegisterInfo
Eax As Long
Ebx As Long
Ecx As Long
Edx As Long
Esi As Long
Edi As Long
Ebp As Long
Esp As Long
End Type

Private Declare Sub VBEX_SetCPUInfo Lib "vbex32.dll" _
Alias "VBSETCPUINFO" ( _
Info As CPURegisterInfo, _
ByVal cmd As Long)

Private Declare Sub VBEX_GetCPUInfo Lib "vbex32.dll" _
Alias "VBGETCPUINFO" (cInfo As CPUInfo)
Private Sub Command1_Click()
Dim cI As CPUInfo

VBEX_GetCPUInfo cI
With cI
List1.AddItem "BrandIndex = " & .BrandIndex
List1.AddItem "CPUID = " & .CpuID
List1.AddItem "Description = " & .Description
List1.AddItem "ExtFamily = " & .ExtFamily
List1.AddItem "ExtModel = " & .ExtModel
List1.AddItem "Family = " & .Family
List1.AddItem "FeatureFlags = " & .FeatureFlags
List1.AddItem "Has3DNow = " & .Has3DNow
List1.AddItem "HasFPU = " & .HasFPU
List1.AddItem "HasMMX = " & .HasMMX
List1.AddItem "HasSerial = " & .HasSerial
List1.AddItem "IsType = " & .IsType
List1.AddItem "Model = " & .Model
List1.AddItem "Serial = " & .Serial
List1.AddItem "Speed = " & .Speed
List1.AddItem "Stepping = " & .Stepping
List1.AddItem "Vendor = " & .Vendor
End With
End Sub

Private Sub Command2_Click()
Dim iR As CPURegisterInfo

VBEX_SetCPUInfo iR, 1
MsgBox "Eax = " & iR.Eax & vbCrLf & _
"Ebx = " & iR.Ebx & vbCrLf & _
"Ecx = " & iR.Ecx & vbCrLf & _
"Edx = " & iR.Edx
End Sub

Private Sub Form_Load()
List1.Clear
End Sub
0
alle Nachrichten anzeigenGesamtübersicht  |  Zum Thema  |  Suchen

 ThemaViews  AutorDatum
den cpu speed ermittlen geht das mit VB ??540AtomSoldier04.01.03 23:11
Re: den cpu speed ermittlen geht das mit VB ??366unbekannt04.01.03 23:27
Re: den cpu speed ermittlen geht das mit VB ??357AtomSoldier04.01.03 23:51
Re: den cpu speed ermittlen geht das mit VB ??349unbekannt05.01.03 00:09
Re: den cpu speed ermittlen geht das mit VB ??358AtomSoldier05.01.03 00:11
Re: den cpu speed ermittlen geht das mit VB ??354AtomSoldier05.01.03 00:14
Re: den cpu speed ermittlen geht das mit VB ??404unbekannt05.01.03 00:20
Re: den cpu speed ermittlen geht das mit VB ??341AtomSoldier05.01.03 00:22
Re: den cpu speed ermittlen geht das mit VB ??375unbekannt05.01.03 00:28
Re: den cpu speed ermittlen geht das mit VB ??338AtomSoldier05.01.03 00:25
Re: den cpu speed ermittlen geht das mit VB ??354AtomSoldier05.01.03 00:28
Re: den cpu speed ermittlen geht das mit VB ??332unbekannt05.01.03 00:31
Re: den cpu speed ermittlen geht das mit VB ??337AtomSoldier05.01.03 00:32
Re: den cpu speed ermittlen geht das mit VB ??326unbekannt05.01.03 00:35
Re: den cpu speed ermittlen geht das mit VB ??330AtomSoldier05.01.03 00:38
Re: den cpu speed ermittlen geht das mit VB ??348AtomSoldier05.01.03 00:47
Re: den cpu speed ermittlen geht das mit VB ??412unbekannt05.01.03 00:56
Re: den cpu speed ermittlen geht das mit VB ??351AtomSoldier05.01.03 00:58
Re: den cpu speed ermittlen geht das mit VB ??362unbekannt05.01.03 01:12

Sie sind nicht angemeldet!
Um auf diesen Beitrag zu antworten oder neue Beiträge schreiben zu können, müssen Sie sich zunächst anmelden.

Einloggen  |  Neu registrieren

Funktionen:  Zum Thema  |  GesamtübersichtSuchen 

nach obenzurück
 
   

Copyright ©2000-2025 vb@rchiv Dieter Otter
Alle Rechte vorbehalten.
Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein.

Diese Seiten wurden optimiert für eine Bildschirmauflösung von mind. 1280x1024 Pixel