1. Liebe Forumsgemeinde,

    aufgrund der Bestimmungen, die sich aus der DSGVO ergeben, müssten umfangreiche Anpassungen am Forum vorgenommen werden, die sich für uns nicht wirtschaftlich abbilden lassen. Daher haben wir uns entschlossen, das Forum in seiner aktuellen Form zu archivieren und online bereit zu stellen, jedoch keine Neuanmeldungen oder neuen Kommentare mehr zuzulassen. So ist sichergestellt, dass das gesammelte Wissen nicht verloren geht, und wir die Seite dennoch DSGVO-konform zur Verfügung stellen können.
    Dies wird in den nächsten Tagen umgesetzt.

    Ich danke allen, die sich in den letzten Jahren für Hilfesuchende und auch für das Forum selbst engagiert haben. Ich bin weiterhin für euch erreichbar unter tti(bei)pcwelt.de.
    Dismiss Notice

CPU Speed + RAM Größe mit Pascal messen?

Discussion in 'Programmieren' started by Bond, Feb 16, 2003.

Thread Status:
Not open for further replies.
  1. Bond

    Bond Halbes Megabyte

    Hi!
    Folgendes Problem:

    Ich suche eine Funktion, die mir die Prozessorgeschwindigkeit angiebt (also z. B. 1200 MHz), wenn sie außerdem noch den CPU-Typ (PIII, AMD....) rauskriegt wäre das auch nicht schlecht aber nicht zwingend nötig.

    Außerdem suche ich noch eine Methode um die Größe des installierten RAMs zu ermitteln (z. B. 128 MB)....

    Das ganze muss mit Pascal und/oder Assembler funktionieren!!!

    Danke für sachkundigen Rat
    -Bond-
     
  2. SourceLE

    SourceLE Kbyte

    Hi...

    sind ja echt viele Probleme auf einmal. Zu (1): eax & edx müssten in TP 7 gehen >>> mov EAX,[2*EBX+4*EDX]. Zu (2): Keine Ahnung über Free-Pascal. :-(

    MfG & CU
    [Diese Nachricht wurde von SourceLE am 25.02.2003 | 23:01 geändert.]
     
  3. Sumo

    Sumo Kbyte

    Arrrgh! Ein "Sie müssen registriert sein um diese Funktion zu nutzen" Fehler.
    Also nochmal:

    Um 32Bit Register zu nutzen zu können ein 66h vor jeden Befehl schreiben, der 32 Bit braucht.
    40h -> inc ax
    6640h -> inc eax

    in Pascal:
    asm;
    db 66h
    inc ax //daraus wird inc eax
    db 66h
    mov ax,bx //wird zu mov eax,ebx
    end;

    Bin dann noch durch Zufall auf eine Unit gestossen, die dir vielleicht mit der RAM Größe weiterhelfen kann.
    http://www.uni-karlsruhe.de/~lc15/INFO/PASCAL/systemunit.html

    Hab sie aber nicht getestet.
     
  4. Bond

    Bond Halbes Megabyte

    Uiiii... na dann wünsch ich mal gute Besserung. Kannst ja die Zeit schonmal sinnvoll nutzen und darüber nachgrübeln, anstatt nachts noch 9live zu sehen *g* ...
     
  5. SourceLE

    SourceLE Kbyte

    Hi...

    hänge grade mit ner "scheiss" Grippe und 39+ im Bette. Sobald ich wieder wach bin nehm ich mir das unter die Lupe.

    CU & Schnarch
     
  6. Bond

    Bond Halbes Megabyte

    Vielen Dank erstmal für die vielen Antworten!

    Also, ich habe jetzt mal alles mögliche Ausprobiert und bin dabei auf zwei Probleme gestoßen:

    1) Pascal kann ja nur 16 Bit. Ich habe deshalb Probleme die Register "eax" und "edx" in Pascal (auch nicht mittels integriertem Assembler) anzusprechen. Gibt es eine Chance das trotzdem zu schaffen?

    2) Ich habs auch mal mit Free-Pascal versucht (www.freepascal.org), welches ja 32Bit läuft und das eigentlich unterstützen sollte. Erstens hat dieses noch diverse anddere lästige (Grafikmodus)Bugs, aber ein anderes Problem hatte ich damit- ich konnte folgende Prozedur nicht starten:

    PROCEDURE clearpuffer;
    BEGIN
    MEMW[$40:$1a] := MEMW[$40:$80];
    MEMW[$40:$1c] := MEMW[$40:$80];
    END;

    Unter TP 7.0 hat die immer astrein gefunzt, nun scheint Free-Pascal die Befehle MEMW und so nicht zu kennen. Habe aber leider noch keine Möglichkeit gefunden, mit anderen Befehlen das gleiche zu erreichen. Jemand eine Idee???
     
  7. SourceLE

    SourceLE Kbyte

    CODE\'
    ASSUME cs:_TEXT

    GetCPU PROC
    pushf ;save flags for exit
    pushf ;push flags again
    pop bx ;get flags in bx
    and bx, 0FFFH ;clear bits 12-15
    push bx
    popf ;pop flags again
    pushf ;now push them back onto stack
    pop ax ;get flags in ax
    and ax, 0F000H ;mask off unwanted bits
    cmp ax, 0F000H ;are flags 12-15 set?
    jz cpu_86 ;branch if so

    or bx, 0F000H ;attempt to set flags again
    push bx ;push to stack
    popf
    pushf ;push flags to stack
    pop ax ;get flags in ax
    and ax, 0F000H ;check flags 12-15
    jz cpu_286 ;branch if 286 processor

    mov edx, esp ;get stack pointer
    and sp, NOT 3 ;align stack to avoid AC fault
    pushfd
    pop eax ;get 32-bit flags
    mov ecx, eax
    xor eax, 40000H ;set AC bit in flags
    push eax
    popfd ;get flags again
    pushfd ;push flags to stack
    pop eax ;get the result
    mov esp, edx ;restore stack
    xor eax, ecx ;set if AC bit changed
    jz cpu_386 ;branch if 386 cpu

    mov ax, 486H ;set 80486 processor type
    jmp short get_cpu_exit ;branch to exit

    cpu_386:
    mov ax, 386H ;set 80386 processor
    jmp short get_cpu_exit ;branch to exit

    cpu_286:
    mov ax, 286H ;set 80286 processor type
    jmp short get_cpu_exit ;branch to exit

    cpu_86:
    mov ax, 86H ;set processor type to 8086

    get_cpu_exit:
    popf ;restore original flags
    ret
    GetCPU ENDP

    _TEXT ENDS

    Ab Pentium ist das aber anders...

    MfG & CU
     
  8. SourceLE

    SourceLE Kbyte

    Hi...

    mit blossen Pascal sind Deine Karten schlecht. Du kannst aber Assemblercode einbinden. Unter Pascal für DOS kannst du nur CPU\'s bis 486 auslesen und beim Ram nur die 640k bzw. Extendet Speicher. Mit einem Trick kannst Du aber einige BIOS-Werte auslesen. Jedoch müssen diese im Shadow stehen.

    Wenn Du aber Pascal für Win benutzt sieht das schon besser aus.

    MfG & CU
     
  9. Sumo

    Sumo Kbyte

    Ach so. Jetzt hab ich erst verstanden was du suchst.
    Such mal bei Intel.com nach Application Note Nr. 485
    oder bei
    amd.com nach Application Note #20734.
    Den Befehl kennen aber erst die neueren Prozessoren. Musst halt das machen was da steht. Wahrscheinlich musst du in Pascal sogar mit Opcodes arbeiten um den Befehl nutzen zu können.
     
  10. Sumo

    Sumo Kbyte

    Hab mal was wegen der Prozessorgeschwindigkeit gelesen.
    http://www.c-plusplus.de/ubb/cgi-bin/ultimatebb.cgi?ubb=get_topic&f=17&t=000716

    Zum RAM fällt mir jetzt nichts ein.
     
  11. ossilotta

    ossilotta Ehren-Moderator

    eventuell auch hier:
    http://www.pcwelt.de/downloads/system/systemdiagnose/8090/

    mfg ossilotta
     
Thread Status:
Not open for further replies.

Share This Page