Damals hab ich einfach Assembler dafür hergenommen, war natürlich sehr sperrig, aber mit der Abfrage des Carryflag ging es. Multiplikationen waren dann einfach nur eine Schleife von Additionen - braucht natürlich mehr Rechenzeit. Heute kann man übrigens noch immer prima Assembler mit einbauen bei FPC, ist nicht so seltsam wie bei minGW C++ der Syntax. Aber natürlich ist FPC in Reinform viel übersichtlicher als C++ oder gar Assembler.
Hier mal eine kleine Kostprobe von Assembler
Code: Alles auswählen
push ECX; // Hauptzähler sichern
mov ECX, DWCount; // DW-Zeiger laden
mov EAX, [tmpSum1][ECX]; // Summand 1 in EAX laden
mov EBX, [tmpSum2][ECX]; // Summand 2 in EBX laden
add ECX, 4; // Nächstes DW 4x8Byte = 32 Bit
mov DWCount, ECX; // DW-Zeiger für das nächste DoppelWort
pop ECX; // Hauptzähler wiederherstellen
add EAX, EBX; // Beide Doppel-Wörter addieren
jc @@CarryBit; // Bei 32+1 Bit Übertrag auf das nächste DW
// Register sichern
push EAX; // Ergebnis sichern
push ECX; // Hauptzähler sichern
mov ECX, MAXDW; // Anzahl der Kopiervorgänge
// Restliche Bits nachschieben
cmp bCarryBit, 0;
je @@Schieben;
// Carry steht eh schon in EAX
cmp CX, 1; // Zuvor prüfen, ob die Obergrenze überschritten wurde
je @@Error_Overbit; // Wenn ja, Abbruch und Fehlerflag setzen