Thema: Delphi CPUID

Einzelnen Beitrag anzeigen

Muetze1
(Gast)

n/a Beiträge
 
#8

Re: CPUID

  Alt 14. Aug 2007, 18:44
Ok, dann mache es doch selber. Du hast in dem Array nach dem Aufruf von CPUID die Inhalte der Register EAX, EBX, ECX und EDX. In der oben verlinkten Dokumentation findest du zu jedem CPUID Aufruf die entsprechende Dokumentation der Bits.

Ok, nun zu dem auslösen der Bitinformationen.

Beispiel: Im Register EAX steht eine Information in den Bits 14 bis 17 - also 4 Bits (ein Nibble). Diesen Wert willst du nun erhalten, dazu gehst du wie folgt vor:

Du schiebst (english: shift) die Bits runter zu Bit 0, also 14x schieben. Dies kannst du mit dem SHR (shift right) Befehl erledigen. Wenn du also den Wert mit shr 14 um 14 Bits geschoben hast, dann stehen die ehemals Bit 14 bis Bit 17 an Stelle von Bit 0 bis 3 (da wir die ja runtergeschoben haben). Danach sind die Bits 18 bis 32 auch noch vorhanden und mit runtergerutscht und liegen nun auf Bit 4 bis 18. Diese wollen wir aber nicht haben und von daher maskieren wir diese aus. Dazu dient uns eine logische UND Operation. Dabei wird der Wert mit AND und der Maske verarbeitet, wobei die Maske an den Bits eine 1 enthalten muss, wo das vorhandene Bit unverändert bleiben soll und eine 0 an den Bits, welche ausgeblendet (auf 0 gesetzt) werden sollen. Für unser Beispiel würde sich somit eine Maske ergeben, welche Bit 0 bis 3 auf 1 gesetzt hat und alle restlichen Bits auf 0. Diese binäre Schreibweise in Hexadezimalschreibweise ergibt $f. Also mit AND $f arbeiten und du hast im Endeffekt direkt Bit 14 bis 17 nun in deiner Variable:

Delphi-Quellcode:
var
  lDWORD: LongWord;
begin
  lDWORD := Random(MaxInt);

  lDWORD := lDWORD shr 14; // runterschieben um 14 Bits
  lDWORD := lDWORD and $f; // auskommentieren der anderen Bits ab Bit 4

  ShowMessage(Format('bit 14 bis 17 enthielten: %d', [lDWORD]));
end;
oder einzeilig:  lDWORD := ( lDWORD shr 14 ) and $f; Ich denke mal, damit kannst du es probieren (und höchstwahrscheinlich auch schaffen) die Daten zu ermitteln. Probiere es und bei Problemen melde dich hier.
  Mit Zitat antworten Zitat