Sven Rautenberg: Wie mit 64Bit Blöcken arbeiten

Beitrag lesen

Moin!

Auf einem normalen Computer kann man in einer Integer Variable leider nur max. 32 Bit speichern, so dass man einen gesamten Block (linke/rechte Hälfte) nicht in einer Variablen speichern kann.

Wie wird dieses Problem in Programmen gelöst?

Jeder vernünftige Prozessor hat zusätzlich zu seinen Registern noch diverse Flags, welche man für die unterschiedlichsten Dinge nutzen kann.

Für arithmetische Belange gibt es beispielsweise das Carry-Flag, welches z.B. bei Additionen das Übertragsbit enthält, das Zero-Flag (wird gesetzt, wenn eine Operation Null ergibt), das Overflow-Flag (für vorzeichenbehaftete Rechenoperationen) sowie das Negativ-Flag (gesetzt, wenn der Integerwert negativ ist). Ich muß allerdings zugeben, dass diese Ausführungen sich konkret nur auf die Prozessorreihe 6502/6510 beziehen (bei dem weiß ich es), ich kann mir aber kaum vorstellen, dass x86er das grundlegend anders lösen können.

Eine Addition beliebig großer Werte wird mit dem Carry-Flag dann schrittweise vom LSB zum MSB durchgeführt. Vor Beginn der Addition wird das Carry gelöscht, die Addition des LSB setzt oder löscht das Carry, sofern ein Übertrag errechnet wurde, und mit diesem Ergebnis wird das nächst höhere Byte/Word/Longword addiert.

Wer sich damit assemblermäßig nicht rumquälen will, und seine Programmiersprache auch keine direkte Unterstützung liefert, muß sich vermutlich nach einer passenden Mathe-Bibliothek umsehen. :)

  • Sven Rautenberg