Einzelnen Beitrag anzeigen

Olli
(Gast)

n/a Beiträge
 
#6

Re: Delphi Inline Assembler, größere Register

  Alt 5. Dez 2007, 00:46
Im Grunde ist der Teil mit: "wir schreiben das in Assembler" hier das eigentliche Problem. Zumindest wenn man sich deine Aufgabenstellung ansieht. Versuch's mal mit nem Taschenrechner. Die meisten bleiben irgendwo um 30! stecken, neuere irgendwo unter 60! und vielleicht gibt es auch noch Ausnahmen. Das Problem ist weniger die Geschwindigkeit der Berechnung (und das wäre der einzige Grund Assembler einzusetzen), als vielmehr der Platz zum Speichern der Zwischenergebnisse. Und da die Register bis zu absehbaren Größen eben nicht mehr ausreichen, bleibt wohl nur noch der "langsamere" RAM.

Beispielsweise wie hier: http://www.case.edu/cse/eeap/282/21_math_instr.html

Auf der verlinkten Webseite findet man:
Example: Binary multiplication

This program multiplies two 8-bit unsigned numbers using a shift and add algorithm to generate a 16-bit product.

The multiplier is in D2 and the multiplicand in D1. The product is returned in D1.

Algorithm:
Start with most significant bit of multiplier, i.e. bit = 8.
Shift product to line up properly (product = 2 * product).
If multiplier[bit] = 1 then product = product + multiplier.
Decrement bit. If bit>=0 then goto 2.

Functional specification (pseudocode):

Code:
MULTIPLICAND    8-bit number to be multiplied
MULTIPLIER      8-bit number that MULTIPLICAND is multiplied by
PRODUCT         32-bit result

PRODUCT = 0;                /*clear PRODUCT*/
BIT    = 8;                /* starting at MSB */

FOR j = 1 TO 8 DO           /*do for each bit of MULTIPLIER*/
BEGIN
   PRODUCT = PRODUCT * 2;   /*shift PRODUCT left by one bit*/
   IF MULTIPLIER[9-bit] = 1 THEN
      PRODUCT = PRODUCT + MULTIPLICAND;
/* do calculations from most significant bit to least significant bit */

   BIT=BIT-1;   /* decrement bit */
END
  Mit Zitat antworten Zitat