Willkommen ~Gast!
Registrieren || Einloggen || Hilfe/FAQ || Staff
Probleme mit der Registrierung im Forum? Melde dich unter registerEin Bild.
Autor Beitrag
000
06.12.2001, 22:28
Tron



ich hab letztens beschlossen, wieder mal etwas assembler zu proggen und habe mich ueber edit und nasm hergemacht.

rausgekommen ist kleines proggi (251 byte), das mit hilfe des timers (8253) und dem befehl rdtsc berechnet mit wieviel MHz der rechner laeuft.
bei meinem duron klappt das auch ganz prima. (+/- 1MHz)

ich hab mir gedacht, dass ich dieses meisterwerk *g* der welt nicht vorenthalten kann und hab' das proggi mal auf nen server gepappt:
http://www.uni-karlsruhe.de/~za2279/files/MHz.zip

ACHTUNG:
das proggi laeuft nur ab pentium aufwaerts!
auch duerfte es unter NT/2k/XP seinen dienst versagen, da viele direkte hardwarezugriffe (timer, ausgabe auf bildschirm) verwendet werden.

wer tatsaechlich den source haben will: den geb' ich gerne her, muss ihn blos vorher noch etwas kommentieren (aktuell ist kein einziges ; in der asm *g*)

gibt's hier noch ein paar leute die was mit assembler machen? habt ihr auch interessante kleine proggis, die die welt unbedingt sehen muss? *fragend in die runde guck*

--

'KEINE PANIK' - aus der Triologie in fuenf Baenden von Douglas Adams

'FÜR DEINN FERD' - aus 'Gevatter Tod' von Terry Pratchett

zum Seitenanfang zum Seitenende Profil || Suche
001
06.12.2001, 23:02
Retro



Code währe derbst cool =)

Ich fange mit ASM an, aber eher in Sachen Microconroller, aber ASM bleibt ASM - bin aber noch nubbi ;)

--

shielding people from their own stupidity is an evolutionary step backwards anyway.

/* God is dead!............Nietzsche */
/* Nietzsche is dead!......God */
/* Nietzsche is God!.......The Dead */

zum Seitenanfang zum Seitenende Profil || Suche
002
06.12.2001, 23:05
Tron



jo, ich schreib' mal einige kommentare dazu, aber wahrscheinlich erst morgen *gaehn*

lass das teil mal laufen, funzt es bei dir richtig? (konnte es bisher nur auf meinem duron 800@840 und auf dem rechner eines kumpels, duron 600, testen)

--

'KEINE PANIK' - aus der Triologie in fuenf Baenden von Douglas Adams

'FÜR DEINN FERD' - aus 'Gevatter Tod' von Terry Pratchett

zum Seitenanfang zum Seitenende Profil || Suche
003
06.12.2001, 23:12
Retro



Hmpf, gut das dus erwähnst =\

Nichts geht, ziemlich komisch:

Ich hab Win98 FE und nen PIII 866

--

shielding people from their own stupidity is an evolutionary step backwards anyway.

/* God is dead!............Nietzsche */
/* Nietzsche is dead!......God */
/* Nietzsche is God!.......The Dead */

zum Seitenanfang zum Seitenende Profil || Suche
004
06.12.2001, 23:30
Tron



@Retro
DAS ist seltsam
es sieht so aus als wuerde statt in die zeichen-positionen (gerade adressen) in die attribut-bytes (ungerade addressen) geschrieben werden
aus irgendeinem grund wird der text eine bytestelle zuweit geschrieben
in deinem fall statt offset 960 -> 961
die laenge des 'textes' stimmt und vom farbmuster her scheinen es auch die richtigen zeichen zu sein

hat noch wer das problem?

<edit>
hab mal versuchsweise was geaendert

shld di, ax, 17
zu
mov di, ax
shl di, 1

das muesste allerdings das gleiche sein

und hab auch mal den (unkommentierten) source dazugepackt

url ist die selbe:
www.uni-karlsruhe.de/~za2279/files/MHz.zip

</edit>

--

'KEINE PANIK' - aus der Triologie in fuenf Baenden von Douglas Adams

'FÜR DEINN FERD' - aus 'Gevatter Tod' von Terry Pratchett


Dieser Beitrag wurde am 06.12.2001 um 23:36 von Tron bearbeitet.
zum Seitenanfang zum Seitenende Profil || Suche
005
07.12.2001, 00:14
Kriz



Bei mir klappt es (hab ja auch nen AMD, hrhrhr =)

--

K:R-I)Z++
"CSS ist cascading style sheets. Und nicht so'n Ranzspiel." - dp
In memory of Voice († 2005/03/30)

zum Seitenanfang zum Seitenende Profil || Suche
006
07.12.2001, 00:18
Retro



Jau, jetzt klappts auch! =D

870Mhz!

--

shielding people from their own stupidity is an evolutionary step backwards anyway.

/* God is dead!............Nietzsche */
/* Nietzsche is dead!......God */
/* Nietzsche is God!.......The Dead */

zum Seitenanfang zum Seitenende Profil || Suche
007
07.12.2001, 08:45
Ultimate_Blade



ich hab nen PIII 500 (firmenrechner) und bei mir steht 1002 Mhz! *scheissintel

--

ICQ: 150855202

zum Seitenanfang zum Seitenende Profil || Suche
008
07.12.2001, 12:30
Tron



@Ultimate_Blade:
das ist genau das, was ich befuerchtet habe...
wenn ich bei mir getestet hab kam immer 420 statt 840 raus
beim dem rechner meines kumpels das gleiche problem: 300 statt 600
deswegen lass ich das ergebnis einfach verdoppeln (ich weiss auch net warum, eigentlich muesste man es nicht verdoppeln muessen)

bei retro stimmts ja auch (ebensfalls, da * 2)

ich berechne die MHz folgendermasen:
timer: tick-differenz des timer-chips (fest 1.193.180 Hz)
cpu: tich-differenz der prozessorzyklen (so viele wie die cpu getaktet ist)

MHz = cpu / timer * 1.193.180 / 1.000.000 * 2

und das problem ist, dass ich nicht weiss, warum ich * 2 machen muss, eigentlich duerfte das ja nicht sein...

--

'KEINE PANIK' - aus der Triologie in fuenf Baenden von Douglas Adams

'FÜR DEINN FERD' - aus 'Gevatter Tod' von Terry Pratchett

zum Seitenanfang zum Seitenende Profil || Suche
009
07.12.2001, 12:37
Ultimate_Blade



ok, frag nich mich, ich hab vom assembler & co sowieso weniger als 0 ahnung ;)

--

ICQ: 150855202

zum Seitenanfang zum Seitenende Profil || Suche
010
07.12.2001, 13:50
Kriz



Hm, eventuell werden einmal nur die ganzen Takte berechnet und ein anderes Mal dagegen die aufsteigenden und absteigenden Taktflanken. Könnte eventuell an der Prozessorarchitektur liegen. Angenommen das Proggi ermittelt nur ganze Takte, die aber aus irgendeinem gottlosen Grund exakt die Hälfte der leistung darstellt. Also multiplizierst du den Wert mit 2 und siehe da, jetzt stimmt es. Bei einem anderen Prozessorkern ermittelt das Proggi dagegen auf- und absteigende Taktflanken, was im Endeffekt ja eine implizite Multiplikation mit 2 ergibt. Nun wird der Spaß aber wieder explizit mit 2 multipliziert und es kommt ein doppelt so große Rate bei raus.

Aber: Ma waases net, ma waases net, ma munkelt nur... =)

--

K:R-I)Z++
"CSS ist cascading style sheets. Und nicht so'n Ranzspiel." - dp
In memory of Voice († 2005/03/30)

zum Seitenanfang zum Seitenende Profil || Suche
011
07.12.2001, 16:37
Tron



also an rdtsc liegt es (zumindest bei meinem rechner) definitiv nicht
etwa alle 5 sekunden zaehlt es bei 840 MHz eine 2^32 durch, das stimmt mit meinen messungen (stoppuhr) ueberein

das problem scheint wohl irgendwie mit dem timer zusammenzuhaengen
ich klemm mich einfach an den zaehler 0 dran und lese ihn aus (das ist der fuer den timerinterrupt alle 1/18,2 sekunden)
ich lese ihn aus (und merke mir direkt danach den wert von rdtsc)
nun lese ich ihn so lange aus, bis die differenz zur ersten messung mindestens 0x1000 (halt irgendein wert) betraegt
und dann rechne ich das wie oben beschrieben aus

daraus folgere ich, dass es irgendwelche unterschiede beim timer (oder seiner einstellung) geben muss (sber eigentlich laut pc-standard kann das auch net sein, soviel zum thema '100% ibm-pc kompatibel')

*verwirrt*

--

'KEINE PANIK' - aus der Triologie in fuenf Baenden von Douglas Adams

'FÜR DEINN FERD' - aus 'Gevatter Tod' von Terry Pratchett

zum Seitenanfang zum Seitenende Profil || Suche
012
07.12.2001, 18:39
WareWolf



liest Du den 18,2 sec Timer über den BIOS INT 1a aus oder geht das auch direkt?

--

Sig as a brick ┴┬┴┬┴┬┴┬┴┬┴┬┴
WW

zum Seitenanfang zum Seitenende Profil || Suche
013
07.12.2001, 18:41
Mazze



Ich kenne ja deine Code nicht!
Nimmst du den 8253 Timer?

--

BattleTech-MOD:
http://bthl.unitedgaming.net/

zum Seitenanfang zum Seitenende Profil || Suche
014
07.12.2001, 18:52
WareWolf



..übrigends schmiert bei mir die Kiste grausam ab, nachdem MHZ.COM gestartet wird. Und zwar ziehmlich am Anfang beim beschreiben von:
out 43,al

--

Sig as a brick ┴┬┴┬┴┬┴┬┴┬┴┬┴
WW

zum Seitenanfang zum Seitenende Profil || Suche
015
07.12.2001, 19:08
Mazze



Oh sorry. Les grad oben, dass du diesen Timer genommen hast!

--

BattleTech-MOD:
http://bthl.unitedgaming.net/

zum Seitenanfang zum Seitenende Profil || Suche
016
07.12.2001, 19:53
TheTinySteini



Ob dieser Unterschied mit den Idle-Cycles zu tun haben kann? Da gab's doch auch unter Windoof 95 das Problem, dass die AMDs einfach zu schnell waren. Mit den neuesten P4s ist das übrigens jetzt auch bei Intel-CPUs so (sprich: ein P4 ist im Idle-Cycle heute so schnell wie damals ein K6-2 =)

--

TheTinySteini
Coder Poke646
"Don't Panic" - Hitchhiker's Guide to the Galaxy

zum Seitenanfang zum Seitenende Profil || Suche
017
07.12.2001, 21:17
Tron



@Mazze:
der code is in der zip drin, ausserdem kann man pures assembler auch problemlos disassemblieren (;

@WareWolf:
das ist seltsam, dass es da verreckt, die zeile macht nix anderes als dem timerbaustein zu sagen, dass ich seinen ersten zaehler auslesen will
welches os hast du?
und nein, ich lese nicht ueber den int 0x1a aus, ich lese direkt den counter des ersten timers aus

@TheTinySteini:
ich denke nicht, dass es daran liegt
sonst muessten ja PRAEZISE 50% idlecycles sein (was immer das ist)

ausserdem tritt das problem mit dem * 2 auch unter normalen dos auf...

hat jemand ahnung von der programmierung des 8253?

--

'KEINE PANIK' - aus der Triologie in fuenf Baenden von Douglas Adams

'FÜR DEINN FERD' - aus 'Gevatter Tod' von Terry Pratchett

zum Seitenanfang zum Seitenende Profil || Suche
018
08.12.2001, 12:49
Mazze



Ich kenn halt den Zen-Timer von Michael Abrash, der mit diesem Chip arbeitet!

--

BattleTech-MOD:
http://bthl.unitedgaming.net/

zum Seitenanfang zum Seitenende Profil || Suche
019
08.12.2001, 13:59
WareWolf




hmm..ich hab win98 und K6-2

--

Sig as a brick ┴┬┴┬┴┬┴┬┴┬┴┬┴
WW

zum Seitenanfang zum Seitenende Profil || Suche
020
08.12.2001, 16:18
TheTinySteini



Hm, soviel Ahnung hab ich von Assembler nicht, aber die Debug-Ausgabe sieht mir doch irgendwie nach ner korrupten Datei aus. Haste sie nochmal gezogen?
Denn ein DB, also define byte macht mitten im Code an der Stelle eigentlich keinen Sinn. Oder doch? Jedenfalls, wenn nicht, dann war das eigentlich eine Anweisung, wurde aber durch irgendnen Fehler so verändert, dass es keine Anweisung mehr ergibt -> Fehla!

--

TheTinySteini
Coder Poke646
"Don't Panic" - Hitchhiker's Guide to the Galaxy

zum Seitenanfang zum Seitenende Profil || Suche
021
08.12.2001, 16:30
TheTinySteini



Hm, schon gut, debug zeigt mir auch diese Ausgabe:
Quellcode:
16A3:011B FA            CLI
16A3:011C 30C0          XOR     AL,AL
16A3:011E E643          OUT     43,AL
16A3:0120 0F            DB      0F
16A3:0121 316689        XOR     [BP-77],SP
16A3:0124 C1            DB      C1
16A3:0125 E440          IN      AL,40
16A3:0127 88C3          MOV     BL,AL
16A3:0129 E440          IN      AL,40
16A3:012B 88C7          MOV     BH,AL
16A3:012D 30C0          XOR     AL,AL

Debug kriegt also vermutlich rdtsc nicht gebacken ;-)

<edit> Vielleicht sollte ich noch sagen, dass das Tool bei mir korrekt 400MHz anzeigt (Celeron 400)... </edit>

<edit2> Wie lang ist der rdtsc-Befehl denn? Zufällig 3 Bytes? Denn dann passt die Debug-Ausgabe wieder </edit2>

<edit3> Äh? rdtsc ist 0F 31... also 2 Bytes. Soweit so gut, aber im Kompilat kommt danach noch ne 66. Wofür is die denn? Wegen dem eax und edx? Sorry, aber ich hab mich nie richtig mit Assembler für 32-Bit Prozessoren beschäftigt. </edit3>

<edit4> Okok, ich weiß, nicht erst Fragen stellen und dann erst googlen. Hat sich also erledigt =)

Damit kann man doch eigentlich nur vermuten, dass der K6-2 kein rdtsc hat, oder nicht? </edit4>

--

TheTinySteini
Coder Poke646
"Don't Panic" - Hitchhiker's Guide to the Galaxy


Dieser Beitrag wurde am 08.12.2001 um 16:49 von TheTinySteini bearbeitet.
zum Seitenanfang zum Seitenende Profil || Suche
022
08.12.2001, 16:49
Tron



@TTS:
wie du richtig bemerkt hast, rafft debug den rdtsc befehl nicht
(um genau zu sein, ALLE befehle, die nach dem 8086 eingefuehrt wurden)
ob er's richtig anzeigt oder nicht ist egal: korrekt wird es trotzdem ausgefueht
(auch im einzelschrittmodus)

rdtsc is im maschinencode 0x0f 0x31 (also 2 byte)

debug duerfte EINIGES von den code nicht verstehen:
0f 31 rdtsc
66 89 c1 mov ecx, eax
(als beispiel aus meinem code)

@WareWolf:
wo verreckt's?
- nach ausfuehren von out 0x43, al
- nach ausfuehren von rdtsc (0f 31)

--

'KEINE PANIK' - aus der Triologie in fuenf Baenden von Douglas Adams

'FÜR DEINN FERD' - aus 'Gevatter Tod' von Terry Pratchett

zum Seitenanfang zum Seitenende Profil || Suche
023
08.12.2001, 17:38
TheTinySteini



Tron:
Ja, debug rafft einiges nicht, aber meistens ist er nach zwei bis drei Anweisungen wieder auf der richtigen Schiene. Er kann halt unter anderem mit den erweiterten Registern (also e[a,b,c,d]x) nix anfangen und zeigt deshalb dieses, hm... Modusflag (also z.B. 66) als DB 66 an. Aber der Befehl kommt danach im Prinzip korrekt, aber halt ohne das e.

Nunja, die Meldung bei Warewolf tritt jedenfalls genau dort auf, wo rdtsc ausgeführt wird (bei Offset 0120). Es wäre also möglich, dass der K6-2 rdtsc nicht kennt. Laut dieser Seite: http://www.deinmeister.de/e_cy6x86cr.htm#rdtscanchor kennt der Cyrix 6x86 den Befehl nicht, aber vom K6-2 ist nicht die Rede...

Achja, nochwas: unter reinem Dos (beim Start "Nur Eingabeaufforderung" ausgewählt) zeigt dein Prog 801 MHz an, nur unter Windows kommt korrekt 400 MHz. Häh?

--

TheTinySteini
Coder Poke646
"Don't Panic" - Hitchhiker's Guide to the Galaxy

zum Seitenanfang zum Seitenende Profil || Suche
024
08.12.2001, 17:41
WareWolf



wenn ich im Trace durchzottele, verreckts direkt bei out 43,al, zum rdtsc gelang ich also gar nicht.Komisch.

--

Sig as a brick ┴┬┴┬┴┬┴┬┴┬┴┬┴
WW

zum Seitenanfang zum Seitenende Profil || Suche