Der Assembler-Befehl rdtsc liest einen prozessorinternen Zähler aus, der
mit jedem Takt um Eins erhöht wird. Diesen Zähler gibt es in x86-Prozessoren offiziell
seit dem Pentium II, also seit 1997. Da er aber durch das Betriebssystem abgeschaltet
oder eingeschränkt werden kann, ist er nicht immer verfügbar. Allerdings schaltet
kein Betriebssystem diesen Zähler standardmäßig ab. Der Zähler hat eine Breite von
64 Bits und wird mit rdtsc in das Registerpaar EDX:EAX geladen. Wenn der
Assembler kein rdtsc unterstützt, kann man sich mit dw 310Fh behelfen.
Zu beachten ist, dass heutige Computer und Betriebssysteme die Taktfrequenz je nach
Belastung, Temperatur und Laune ständig verändern.
Eine genaue Zeitmessung ist mit rdtsc also nicht möglich.
Wenn man den Zähler einmal ausliest, und später noch einmal, kann man durch Subtraktion
des ersten Wertes vom zweiten ermitteln wieviele Takte bei diesem Prozessor
zwischen den beiden Auslesevorgängen vergangen sind. So kann man messen, wieviele
Takte eine Reihe von Anweisungen verschlungen hat.
Man kann die Taktfrequenz des Prozessors ungefähr bestimmen, wenn man zwischen
den beiden Auslesevorgängen genau eine Sekunde wartet:
Ein Nasm-Programm, das mit GoLink ohne die Option /console gelinkt wird, führt
bei einigen Antivirus-Programmen zu einem Trojaner-Alarm - natürlich hoffnungslos
falsch. Nachfolgend der obige Algorithmus für GoAsm, wenn eine Konsole nicht benutzt
werden soll (Subsystem Windows):