Max_Power am 20.10.2004 12:50 schrieb:
hm, danke... darüber denk ich mal nach. die übung, die zu der aufgabe war, hab ich verpasst. die war heut morgen halb 8. da hab ich mich grad nochmal im bett umgedreht *G*
ich frag mich halt immer noch, warum das ding nicht kompiliert... aber ich finds schon raus. ich versuchs mal mit nur einem long, mal sehen was passiert
edit: hab mal rumgespielt, jetz kompilierts wenigstens. ich hab die 2. zeile mal so
#define rdtsc(X) //asm volatile("rdtsc":"=A" (X))
verändert, fragt sich ob das sinn macht...
na ja, jetz weiß ich nur noch nicht, wie ich die ausgabe interpretieren soll... aber das find ich schon raus
Hi,
mit "long long x" wird x als 64Bit Zahl definiert. Das ist also OK, ersetzt Du das durch "long x" arbeitet Dein Programm nur mit 32Bit Werten - letztendlich hängt die zu verwendende Definiton vom Datenbereich ab, in dem ein Programm arbeitet.
Deine Änderung
"#define rdtsc(X) //asm volatile("rdtsc":"=A" (X))"
ist auf jeden Fall Schwachsinn, denn der Präprozessor ersetzt vor dem Kompilieren das rdtsc(X) durch die gegebene Definition, also sieht Dein Code, wenn ihn der Compiler verarbeitet, so aus:
...
for (i=0; i<0x100000; i++) {
//asm volatile("rdtsc":"=A" (start))
//asm volatile("rdtsc":"=A" (stop))
insert(stop-start);
...
Da Du die Variablen start und stop vor der Verwendung nicht initialisierst, ist deren Inhalt einfach zufällig. Damit ist auch das Ergebnis zufällig und eine Interpretation nicht wirklich möglich.
Der Fehler liegt in Deiner Assembler Anweisung!
Bye,
Olaf