2 Register, Datentypen und Befehle der MMX-Erweiterung

Neue (?) Register

Ein MMX-Prozessor stellt 8 neue Register zur Verfügung. Diese Register sind frei verfügbar und werden als MM0 bis MM7 angesprochen. Die Register sind jeweils 64-Bit breit und können ausschließlich zur Speicherung und Bearbeitung von Daten verwendet werden. Eine Speicheradressierung mit Hilfe der MMX-Register ist nicht möglich. Die MMX-Register sind in Abbildung 1 prinzipiell dargestellt.

MMX-Register
Abb. 1: MMX-Register

Dabei muß beachtet werden, daß die MMX-Register den Fließkomma- Registern entsprechen ! Wird ein MMX-Register mit einem Wert beschrieben, so wird der Inhalt im 64-Bit breiten Mantisse-Feld des entsprechenden Fließkomma-Registers gespeichert. Alle Exponenten-Bits werden dabei auf den Wert 1 gesetzt. Auf ähnliche Weise wirken sich Schreibzugriffe auf Fließkomma-Register auf die MMX-Register aus. Jeder Zugriff auf ein MMX-Register setzt zusätzlich den Wert TOS (Top of Stack) auf 0 zurück.

Eine Vermischung von Fließkomma- und MMX-Befehlen ist aus diesem Grund nicht möglich bzw. setzt eine besondere Aufteilung von MMX- und Fließkommabefehlen voraus. Weiterhin sollten MMX-Routinen mit dem Befehl EMMS (Empty MMX State) beendet werden, wenn andere Module eventuell Fließkomma- Operationen durchführen. Durch den EMMS-Befehl werden die Fließkomma- Register als nicht belegt gekennzeichnet und können damit von Fließkomma-Befehlen genutzt werden. Wird EMMS nicht benutzt, kann eine Exception die Folge sein, wenn der Prozessor versucht, auf die Fließkomma-Register zuzugreifen (diese wurden ja bereits mit MMX-Werten belegt).

Die Umschaltungen zwischen MMX- und Fließkomma-Befehlen sollten jedoch möglichst gering gehalten werden, da eine solche Umschaltung bis zu 50 Taktzyklen benötigen kann.

Der Vorteil der Alias-Bildung zwischen MMX- und Fließkommabefehlen besteht darin, daß für die Nutzung von MMX-Befehlen kein neuer Prozessorstatus eingeführt werden mußte. Dadurch ist es z.B. möglich, Programme, die unter einem pre-emptiven Betriebsystem ablaufen, ohne zusätzliche Änderungen mit MMX-Befehlen auszustatten. Die "Rettung" der MMX-Registerinhalte kann dann, im Falle eines Taskwechsels, von den gleichen Mechanismen übernommen werden, wie die Sicherung von Fließkomma-Registerinhalten.

Neue Datentypen

Die sogenannten "Gepackten-Daten" wurden mit der MMX-Erweiterung eingeführt. Dabei können MMX-Befehle mit acht Byte, vier Word oder zwei Doubleword operieren, die in einem 64-Bit breiten MMX-Register gespeichert sind. Diese 64-Bit werden dann als "Gepackte-Daten" bezeichnet. Abbildung 2 veranschaulicht die möglichen Aufteilungen eines 64 Bit-breiten Wertes.

Gepackte Daten
Abb. 2: Gepackte Daten

Auf welche Daten (Byte, Word oder Doubleword) ein MMX-Befehl letztendlich Operationen ausführt, wird durch den MMX-Befehlsnamen festgelegt. Ebenfalls durch den Befehlsnamen wird festgelegt, wie das höchstwertigste Bit (MSB - most significant bit) der einzelnen "gepackten" Daten interpretiert werden soll. So kann zwischen vorzeichenbehafteten und vorzeichenlosen Daten unterschieden werden.

Diese Unterscheidung ist auch für eine weitere Eigenschaft der MMX- Befehle von Bedeutung, der sogenannten "Saturation". Dadurch kann, wie weiter oben bereits festgestellt wurde, der Wertebereich der einzelnen "gepackten" Daten im Falle eines Überlaufs auf das Maximum (bzw. Minimum) beschränkt werden. Diese Eigenschaft wird ebenfalls durch den Namen des Befehls festgelegt (durch ein Befehlsuffix). Das folgende Beispiel soll die "Saturation"-Thematik verdeutlichen.

Beispiel

Gegeben ist der folgende 64-Bit Wert.

        FDCE365310DDC3A2h

Wird dieser Wert als Byte-gepackter Datentyp interpretiert, so ergibt sich folgende Bytefolge (alle Werte hexadezimal, 1 Quadword= 64 Bit= 8 Byte):

        FD CE 36 53 10 DD C3 A2

Die einzelnen Bytes sollen als vorzeichenlose Werte betrachtet werden. Zu jedem Byte wird der Wert 20h addiert. Ohne "Saturation" ergibt sich das folgende Ergebnis (alle Werte hexadezimal).

        FD CE 36 53 10 E4 C3 A2
      + 20 20 20 20 20 20 20 20
        -----------------------
        1D EE 56 73 30 04 E3 C2

In diesem Beispiel würden das 1. und 6. Byte den Wertebereich verlassen und nicht das korrekte Ergebnis liefern. Der "Überlauf" der Addition führt zu den falschen Werten 1Dh und 04h.

Mit "Saturation" wird die Addition wie folgt ausgeführt.

        FD CE 36 53 10 E4 C3 A2
      + 20 20 20 20 20 20 20 20
        -----------------------
        FF EE 56 73 30 FF E3 C2

Die Bytes 1. und 6. werden jetzt auf ihre maximalen Werte (= 0FFh) beschränkt.

Natürlich ist eine solche Überprüfung des Wertebereiches auch ohne die MMX-Erweiterung denkbar, nur kann sie ein Prozessor mit MMX gleichzeitig mit allen gepackten Daten und noch dazu in nur einem einzigen Befehl ausführen. Die MMX-Erweiterung kann deshalb in diesen Fällen effizienter arbeiten.

Wie zwischen den unterschiedlichen Befehlsarten (vorzeichenlos/vorzeichenbehaftet, Saturation benutzen/nicht benutzen) unterschieden wird, soll als nächstes betrachtet werden.


zurueck weiter
Zum Index


Probleme oder Vorschläge zu dieser Webseite, bitte per email an: hohmuth@t-online.de
Letzte Änderungen am: 02.01.1999, Jens Hohmuth.