Sequentiell Bits aus CPU-Register auslesen

Hardware- und Elektronikbasteleien, Ansteuerung von Schnittstellen und Peripherie.
Fragen zu "Consumer"-Problemen kommen in Offtopic.
Benutzeravatar
Mok
BotHunter
Beiträge: 1484
Registriert: 26.12.2005 14:14
Computerausstattung: MSI GX780R
Intel Core i5-2410M
Nvidia GT 555M
Windows 7 Home Premium 64 bit
Wohnort:   

Sequentiell Bits aus CPU-Register auslesen

Beitrag 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.
Win 7 Home Premium 64 bit | PureBasic 5.20 - x86 und x86-64 | Firefox [aktuelle stable-Version hier einfügen]
"Jeder macht irgendwann mal Fehler, darum gibt's auch Bleistifte mit Radiergummi." --Carl
Benutzeravatar
STARGÅTE
Kommando SG1
Beiträge: 6996
Registriert: 01.11.2005 13:34
Wohnort: Glienicke
Kontaktdaten:

Re: Sequentiell Bits aus CPU-Register auslesen

Beitrag 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$)
PB 6.01 ― Win 10, 21H2 ― Ryzen 9 3900X, 32 GB ― NVIDIA GeForce RTX 3080 ― Vivaldi 6.0 ― www.unionbytes.de
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
Benutzeravatar
Mok
BotHunter
Beiträge: 1484
Registriert: 26.12.2005 14:14
Computerausstattung: MSI GX780R
Intel Core i5-2410M
Nvidia GT 555M
Windows 7 Home Premium 64 bit
Wohnort:   

Re: Sequentiell Bits aus CPU-Register auslesen

Beitrag von Mok »

@STARGÅTE:
Hä?!
Win 7 Home Premium 64 bit | PureBasic 5.20 - x86 und x86-64 | Firefox [aktuelle stable-Version hier einfügen]
"Jeder macht irgendwann mal Fehler, darum gibt's auch Bleistifte mit Radiergummi." --Carl
Benutzeravatar
STARGÅTE
Kommando SG1
Beiträge: 6996
Registriert: 01.11.2005 13:34
Wohnort: Glienicke
Kontaktdaten:

Re: Sequentiell Bits aus CPU-Register auslesen

Beitrag 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
PB 6.01 ― Win 10, 21H2 ― Ryzen 9 3900X, 32 GB ― NVIDIA GeForce RTX 3080 ― Vivaldi 6.0 ― www.unionbytes.de
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
Benutzeravatar
TomS
Beiträge: 1508
Registriert: 23.12.2005 12:41
Wohnort: München

Re: Sequentiell Bits aus CPU-Register auslesen

Beitrag 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:
Benutzeravatar
Mok
BotHunter
Beiträge: 1484
Registriert: 26.12.2005 14:14
Computerausstattung: MSI GX780R
Intel Core i5-2410M
Nvidia GT 555M
Windows 7 Home Premium 64 bit
Wohnort:   

Re: Sequentiell Bits aus CPU-Register auslesen

Beitrag von Mok »

@STARGÅTE: Hab's jetzt kapiert!
@TomS: Ich hab's lange lustig gesehen, aber jetzt reicht's! ES REICHT!
Win 7 Home Premium 64 bit | PureBasic 5.20 - x86 und x86-64 | Firefox [aktuelle stable-Version hier einfügen]
"Jeder macht irgendwann mal Fehler, darum gibt's auch Bleistifte mit Radiergummi." --Carl
DarkDragon
Beiträge: 6267
Registriert: 29.08.2004 08:37
Computerausstattung: Hoffentlich bald keine mehr
Kontaktdaten:

Re: Sequentiell Bits aus CPU-Register auslesen

Beitrag 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
Angenommen es gäbe einen Algorithmus mit imaginärer Laufzeit O(i * n), dann gilt O((i * n)^2) = O(-1 * n^2) d.h. wenn man diesen Algorithmus verschachtelt ist er fertig, bevor er angefangen hat.
Benutzeravatar
TomS
Beiträge: 1508
Registriert: 23.12.2005 12:41
Wohnort: München

Re: Sequentiell Bits aus CPU-Register auslesen

Beitrag 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.
Benutzeravatar
STARGÅTE
Kommando SG1
Beiträge: 6996
Registriert: 01.11.2005 13:34
Wohnort: Glienicke
Kontaktdaten:

Re: Sequentiell Bits aus CPU-Register auslesen

Beitrag von STARGÅTE »

@TomS
Ich denke mal er hat sich nur verschreiben meint aber das richtige ...
PB 6.01 ― Win 10, 21H2 ― Ryzen 9 3900X, 32 GB ― NVIDIA GeForce RTX 3080 ― Vivaldi 6.0 ― www.unionbytes.de
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
Benutzeravatar
Mok
BotHunter
Beiträge: 1484
Registriert: 26.12.2005 14:14
Computerausstattung: MSI GX780R
Intel Core i5-2410M
Nvidia GT 555M
Windows 7 Home Premium 64 bit
Wohnort:   

Re: Sequentiell Bits aus CPU-Register auslesen

Beitrag 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...
Win 7 Home Premium 64 bit | PureBasic 5.20 - x86 und x86-64 | Firefox [aktuelle stable-Version hier einfügen]
"Jeder macht irgendwann mal Fehler, darum gibt's auch Bleistifte mit Radiergummi." --Carl
Antworten