Division von QWords

29/08/2008 - 12:15 von Markus Wichmann | Report spam
Hi all,

als ich das Programm aus dem Thread über Fibonacci-Zahlen mit loop
unrolling nachprogrammieren wollte (assembler only), kam ich bis zu
der Zeile

td := (t5 - t4) div times;

(wobei ich die darüberliegenden noch nicht probiert hatte, da t5 gerade
in den Registern ist, man es also nicht erst noch in den Speicher
schieben muss). Wie zum Geier soll ich das denn berechnen? Ich habe es
so hier versucht:

mov ecx, ts ;ts = times, weil times für NASM Sonderbedeutung hat

sub eax, [t4+4]
sbb edx, [t4] ; t4 ist ein Ergebnis von rdtsc: t4 = edx, t4+4 = eax

Ja, und dann? Was ist, wenn das Ergebnis über 400 Milliarden liegt?
(Wird nicht passieren, ich weiß, aber mal so prinzipiell)

Ich meine, dann passt das Ergebnis von

div ecx

ja nicht mehr in eax rein. Wie sollte man an der Stelle dividieren?
(Beispiel erwünscht!)

Tschö,
Markus
Nur weil ein Genie nix reißt, muß ja nun nicht gleich jeder Idiot
pausieren... Bully hats ja auch geschafft.
 

Lesen sie die antworten

#1 Sebastian Biallas
29/08/2008 - 12:39 | Warnen spam
Markus Wichmann wrote:
Wie sollte man an der Stelle dividieren?



So, wie man in der Schule die schriftliche Division gelernt hat.

(Beispiel erwünscht!)



Der gcc ruft dafür udivdi3 auf.

Gruß,
Sebastian

Ähnliche fragen