Seite 1 von 2

Sequentiell Bits aus CPU-Register auslesen

Verfasst: 28.09.2010 21:43
von Mok
Hallo!
Ich les' gerade in der Intel-Assembler-Referenz, wie man einige Infos zur CPU auslesen kann, dabei werden 6(!) verschiedene Informationen in einem eizigen Register (32 Bit) untergebracht... wie kann ich diese jetzt auslesen?

Hier ein Teil der Grafik:
Bild

Ich hätte es auch mit dem folgenden Code probiert:

Code: Alles auswählen

EnableASM
Define.l stepping
!MOV EAX, $00000001
!CPUID
!MOV [v_stepping], EAX

Debug PeekL(@stepping)
Allerdings ist Long ja 4 Bytes groß, was bedeutet, dass "stepping" den ganzen Register "beherbergt", allerdings will ich ja nur die Bits 0 - 3. Mit PeekB() - was nur 1 Byte, also 4 Bit ausliest - hab ich's auch schon probiert, allerdings wird dann als Stepping die Zahl 49 angezeigt, obwohl mehrfach (WMI, CPU-Z, usw.) belegt wurde, dass die Stepping-ID '2' ist.
Außerdem sieht die Grafik aus, als wäre von Bit 12 bis 13 der 'Processor Type' gespeichert. Zwei Bit... ok, also mit PB nicht möglich, da man mindestens 1 Byte mit Peek<Whatever>() ausliest.
Hat jemand ne Lösung?
Danke im Voraus!

Gruß, Mok.

Re: Sequentiell Bits aus CPU-Register auslesen

Verfasst: 28.09.2010 22:22
von STARGÅTE
Ganz billig kannst du doch einfach Bin() nutzen:

Code: Alles auswählen

;      %00000000000000000000000000000000
;       \Byte4 /\Byte3 /\Byte2 /\Byte1 /
;       \   Long                       /

Long = %00000011000001100000000000000100
Debug RSet(Bin(Long),32,"0")
Dann ganz "billig" mit Mid() den gewünschten bereich clippen:
Und mit Val() dann zur Zahl konvertieren

Code: Alles auswählen

First4$ = Mid(Bits$,32-3,4)
Debug First4$
Debug Val("%"+First4$)

Re: Sequentiell Bits aus CPU-Register auslesen

Verfasst: 28.09.2010 22:31
von Mok
@STARGÅTE:
Hä?!

Re: Sequentiell Bits aus CPU-Register auslesen

Verfasst: 28.09.2010 22:39
von STARGÅTE
Was "hä?!"

Du hast geschreiben:
"dabei werden 6(!) verschiedene Informationen in einem eizigen Register (32 Bit) untergebracht"
32Bit = Long
Also alles in eine Long lesen,
zu einem Bit-String machen (siehe Code)
und dann den gewünschten teil auslesen (seihe Code)

Ansonst kannst du noch mit den Bit-Shift-Operatorn arbeiten << und >>

Code: Alles auswählen

Long = %00000011000001100000000001110100
Ersten4Bits = Long&%1111
Debug Ersten4Bits
Naechsten6Bits = Long>>4&%111111
Debug Naechsten6Bits

Re: Sequentiell Bits aus CPU-Register auslesen

Verfasst: 28.09.2010 22:49
von TomS
Mok hat geschrieben:Mit PeekB() - was nur 1 Byte, also 4 Bit ausliest
Ich bin ja normal nicht so und manchmal hab ich auch blöde Fragen, aber:
Fluid Byte hat geschrieben:Bild
:lol:

Re: Sequentiell Bits aus CPU-Register auslesen

Verfasst: 28.09.2010 22:56
von Mok
@STARGÅTE: Hab's jetzt kapiert!
@TomS: Ich hab's lange lustig gesehen, aber jetzt reicht's! ES REICHT!

Re: Sequentiell Bits aus CPU-Register auslesen

Verfasst: 29.09.2010 08:05
von DarkDragon
Wie wärs mit einem logischen Und und Bitverschiebung?

Für die Bits 0..3:

Code: Alles auswählen

Debug stepping & $00000007
Für Bit 12..13:

Code: Alles auswählen

Debug (stepping >> 12) & $00000003

Re: Sequentiell Bits aus CPU-Register auslesen

Verfasst: 29.09.2010 10:31
von TomS
Ich kann ja nicht's dafür, wenn du in der Schule nicht aufgepasst hast. /:->
Vielleicht sollte man sich bevor man so komplizierte Sachen versucht ersteinmal mit den Grundlagen beschäftigen.

Re: Sequentiell Bits aus CPU-Register auslesen

Verfasst: 29.09.2010 14:15
von STARGÅTE
@TomS
Ich denke mal er hat sich nur verschreiben meint aber das richtige ...

Re: Sequentiell Bits aus CPU-Register auslesen

Verfasst: 29.09.2010 14:41
von Mok
@DD: Elegant gelöst! :allright:
@TomS: Ich kann ja nichts dafür, wenn du nichts besseres zu tun hast, als Radfahr-Bilder in irgendwelche Threads zu posten.
Vielleicht sollte man sich bevor man so nen Scheiß macht, erst einmal überlegen, ob man sich nicht schonmal selber verschrieben hat...