你好 Christoph,
Dabei wird ja beinahe ausschließlich mit den einzelnen Bits gearbeitet,
aber insbesondere das Verständnis »warum so, und nichts anders«
bereitet mir im Moment noch einige Probleme.Prinzipiell weil es einfacher in Hardware zu implementieren ist. Deshalb
sind solche Implementationen bei mancher Architektur auch schneller.
Jupp, auf IA32 (also einem 386er) braucht z. B. ein DIV (Division) zwischen
14 und 41 Zyklen, ein IDIV (vorzeichenbehaftete Integer-Division) zwischen
19 und 46 Zyklen, je nach Operanden-Typ.
Ein MUL (vorzeichenlose Multiplikation) braucht zwischen 9 und 21 Zyklen,
ein IMUL (vorzeichenbehaftete Multiplikation) zwischen 9 und 41 Zyklen.
Ein Modulo gibt es nicht, das ist eine Division (IDIV); bei der Division
wird immer Quotient und Rest in zwei Registern abgelegt, abhängig von den
Quell-Operanden (also entweder Quotient in AL und Rest in AH, oder
Quotient in AL und Rest in DX).
Ein SHL/SAL (SHIFT LOGICAL LEFT/SHIFT ARITHMETIC LEFT) braucht dagegen
zwischen 3 und 7 Zyklen, abhängig von den Operanden, ein SHR/SAR (SHIFT
LOGICAL RIGHT/SHIFT ARITHMETICAL RIGHT) braucht 3 bis 7 Zyklen.
Das variiert ein wenig von Prozessor zu Prozessor, aber die Tendenzen sind
klar.
Problem hier: es wird vorausgesetzt, das alle anderen Bits der binaeren
Darstellung der dezimalen Zahl '3' auf Null gesetzt sind, das ist nicht
ueberall der Fall. Ist hier egal, ich wollt's nur noch mal erwaehnt
wissen.
Ja, ich hab da von ganz kranken Sachen gehört, die Intel-Architektur
enthält z. B. diverse Anweisungen, um mit BCD zu rechnen… *schüttel*
fakt(10) = 2 * 5 = 2 * fakt(5) = 2 * (fakt(4) + 1) = 2 * (2 * 2 + 1)
Wie man sieht: die Klammern sind hier entscheidend ;-)
Hehe, du weisst sicher, dass
2 * (2 * 2 + 1) = 2 * 2 * 2 + 1
da die Multiplikation in |R assoziativ ist.
再见,
克里斯蒂安
Wundert euch nicht, … | Noch eine Block-Installation: SELFHTML Aktuell
Wenn gewöhnliche Menschen Wissen erlangen, sind sie weise. Wenn Weise Einsicht erlangen, sind sie gewöhlnliche Menschen.
http://wwwtech.de/