Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht Das deutsche QBasic- und FreeBASIC-Forum
Für euch erreichbar unter qb-forum.de, fb-forum.de und freebasic-forum.de!
 
FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen  RegistrierenRegistrieren
ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin
Zur Begleitseite des Forums / Chat / Impressum
Aktueller Forenpartner:

CPUID Assembler Problem!

 
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Allgemeine Fragen zu FreeBASIC.
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
28398



Anmeldungsdatum: 25.04.2008
Beiträge: 1917

BeitragVerfasst am: 20.05.2008, 21:10    Titel: CPUID Assembler Problem! Antworten mit Zitat

Hallo!

Ich habe mal ein Blick auf Volta's CPUID Code geworfen, und wollte daraus u.a. eine kleine Bibliothek basteln!

Naja, jetzt bekomme ich Fehlermeldungen von GAS happy :
Code:
E:\\fbc -s console "cpuinfo.bas"
cpuinfo.asm: Assembler messages:
cpuinfo.asm:57: Error: expecting operand after ','; got nothing
cpuinfo.asm:58: Error: no such instruction: `eax mov [ebp-28],'
cpuinfo.asm:59: Error: no such instruction: `ebx '
cpuinfo.asm:60: Error: expecting operand after ','; got nothing
cpuinfo.asm:61: Error: no such instruction: `edx mov [ebp-28+8],'
cpuinfo.asm:62: Error: no such instruction: `ecx '

Make done


Quelltext:
Code:




/'
   Deine_winCPU.Bas - by Volta
   
   geändert von csde_rats
'/

Function has_CPUID As Integer
   
   'FB arbeitet auch noch auf Prozessoren die keine CPUID unterstützen!
   'prüfen ob der Prozessor eine lesbare CPUID hat
   Asm
      pushfd ' Save EFLAGS auf den stack
      pop eax ' Store EFLAGS in EAX
      mov ebx, eax ' Save in EBX
      xor eax, &h200000 ' bit 21 wechseln
      push eax ' auf den stack
      popfd ' in die EFLAGS
      pushfd ' Push EFLAGS auf den stack
      pop eax ' EFLAGS in EAX
      cmp eax, ebx ' bleibt bit 21 geändert
      jz no_cpuid ' hat keine CPUID
      mov eax,1
      no_cpuid: mov [Function], eax
   End Asm
   
End Function

Function readVendorName () As String
   Dim _e As UInteger
   Dim vendor As String
   
   Asm
      mov eax, 0
      cpuid mov [_e],
      eax mov [vendor],
      ebx 'vendor String 12 Byte
      mov [vendor+4],
      edx mov [vendor+8],
      ecx
   End Asm
   
   Return vendor
End Function
   
'in erg werden die maximale Anzahl der Funktionsaufrufe angegeben.

Function has_MMX () As Byte
   Dim As Byte hat_mmx = 0
   
   Asm
      test edx, &h00800000 'hat_mmx, Bit 23
      jz doesnot
      mov Byte Ptr [hat_mmx], 1
      
      doesnot:
   End Asm
   
   Return hat_mmx
End Function

Function has_SSE () As Byte
   Dim As Byte hat_sse = 0
   
   Asm
      test edx, &h02000000 'hat_sse, Bit 25
      jz doesnot2
      mov Byte Ptr [hat_sse], 1
      
      doesnot2:
   End Asm
   
   Return hat_sse
End Function

Function has_SSE2 () As Byte
   Dim As Byte hat_sse2 = 0
   
   Asm
      test edx, &h04000000 'hat_sse2, Bit 26
      jz doesnot3
      mov Byte Ptr [hat_sse2], 1
      
      doesnot3:
   End Asm
   
   Return hat_sse2
End Function

Function get_Stepping () As Byte
   Dim As Byte Stepping
   
   Asm
      mov eax, 1
      cpuid
      mov ebx, eax
      and eax, &h0F
      mov [Stepping], al '0-3 Stepping
   End Asm
   
   Return Stepping
End Function

Function get_Model () As Byte
   Dim As Byte Model
   
   Asm
      mov eax, 1
      cpuid
      mov eax,ebx
      shr eax, 4
      and eax, &h0F
      mov [Model], al '4-7 Model
   End Asm
   
   Return Model
End Function

Function get_Family () As Byte
   Dim As Byte Family
   
   Asm
      mov eax, 1
      cpuid
      mov eax,ebx
      shr eax, 8
      and eax, &h0F
      mov [Family], al '8-11 Family
   End Asm
   
   Return Family
End Function
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
28398



Anmeldungsdatum: 25.04.2008
Beiträge: 1917

BeitragVerfasst am: 20.05.2008, 21:14    Titel: Antworten mit Zitat

peinlich Hat sich erledigt^^

Auf Voltas Homepage gibts bei mir (FF) einen Bug, dass alles in einer Zeile steht, naja da hab ich was falsch auseinandergedröselt grinsen

@Volta: Unter welcher Lizenz steht eigtl. dein Kunstwerk?

Berichtigter Code:
Code:



/'
   Deine_winCPU.Bas - by Volta
   
   geändert von csde_rats
'/

Function has_CPUID As Integer
   
   'FB arbeitet auch noch auf Prozessoren die keine CPUID unterstützen!
   'prüfen ob der Prozessor eine lesbare CPUID hat
   Asm
      pushfd ' Save EFLAGS auf den stack
      pop eax ' Store EFLAGS in EAX
      mov ebx, eax ' Save in EBX
      xor eax, &h200000 ' bit 21 wechseln
      push eax ' auf den stack
      popfd ' in die EFLAGS
      pushfd ' Push EFLAGS auf den stack
      pop eax ' EFLAGS in EAX
      cmp eax, ebx ' bleibt bit 21 geändert
      jz no_cpuid ' hat keine CPUID
      mov eax,1
      no_cpuid: mov [Function], eax
   End Asm
   
End Function

Function readVendorName () As String
   Dim _e As UInteger
   Dim vendor As String
   
   Asm
      mov eax, 0
      cpuid
      mov [_e], eax
      mov [vendor], ebx 'vendor String 12 Byte
      mov [vendor+4], edx
      mov [vendor+8], ecx
   End Asm
   
   Return vendor
End Function

Function has_MMX () As Byte
   Dim As Byte hat_mmx = 0
   
   Asm
      test edx, &h00800000 'hat_mmx, Bit 23
      jz doesnot
      mov Byte Ptr [hat_mmx], 1
      
      doesnot:
   End Asm
   
   Return hat_mmx
End Function

Function has_SSE () As Byte
   Dim As Byte hat_sse = 0
   
   Asm
      test edx, &h02000000 'hat_sse, Bit 25
      jz doesnot2
      mov Byte Ptr [hat_sse], 1
      
      doesnot2:
   End Asm
   
   Return hat_sse
End Function

Function has_SSE2 () As Byte
   Dim As Byte hat_sse2 = 0
   
   Asm
      test edx, &h04000000 'hat_sse2, Bit 26
      jz doesnot3
      mov Byte Ptr [hat_sse2], 1
      
      doesnot3:
   End Asm
   
   Return hat_sse2
End Function

Function get_Stepping () As Byte
   Dim As Byte Stepping
   
   Asm
      mov eax, 1
      cpuid
      mov ebx, eax
      and eax, &h0F
      mov [Stepping], al '0-3 Stepping
   End Asm
   
   Return Stepping
End Function

Function get_Model () As Byte
   Dim As Byte Model
   
   Asm
      mov eax, 1
      cpuid
      mov eax,ebx
      shr eax, 4
      and eax, &h0F
      mov [Model], al '4-7 Model
   End Asm
   
   Return Model
End Function

Function get_Family () As Byte
   Dim As Byte Family
   
   Asm
      mov eax, 1
      cpuid
      mov eax,ebx
      shr eax, 8
      and eax, &h0F
      mov [Family], al '8-11 Family
   End Asm
   
   Return Family
End Function
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Jojo
alter Rang


Anmeldungsdatum: 12.02.2005
Beiträge: 9736
Wohnort: Neben der Festplatte

BeitragVerfasst am: 20.05.2008, 21:58    Titel: Antworten mit Zitat

Zitat:
Auf Voltas Homepage gibts bei mir (FF) einen Bug, dass alles in einer Zeile steht, naja da hab ich was falsch auseinandergedröselt grinsen


rechtsklick, quelltext anzeigen... wozu einfach wenn's auch schwer geht, ne...

oder volta baut brav <br>s ein.
_________________
» Die Mathematik wurde geschaffen, um Probleme zu lösen, die es nicht gäbe, wenn die Mathematik nicht erschaffen worden wäre.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
volta



Anmeldungsdatum: 04.05.2005
Beiträge: 1876
Wohnort: D59192

BeitragVerfasst am: 21.05.2008, 09:32    Titel: Antworten mit Zitat

Hi,
@28398
das Copyright von Kunstwerken liegt eindeutig beim Künstler! grinsen

Du darfst deinen Code aber frei verwenden wenn du meinen Namen dabei nicht erwähnst.
Streich also bitte meinen Namen, da einiges so nicht funktionieren wird. lachen
_________________
Warnung an Choleriker:
Dieser Beitrag kann Spuren von Ironie & Sarkasmus enthalten.
Zu Risiken & Nebenwirkungen fragen Sie Ihren Therapeuten oder Psychiater.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
28398



Anmeldungsdatum: 25.04.2008
Beiträge: 1917

BeitragVerfasst am: 21.05.2008, 16:55    Titel: Antworten mit Zitat

Okay... wenns dich nicht stört...
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Allgemeine Fragen zu FreeBASIC. Alle Zeiten sind GMT + 1 Stunde
Seite 1 von 1

 
Gehe zu:  
Du kannst keine Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum nicht antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.

 Impressum :: Datenschutz