Konvertier-Befehle |
---|
Die PACKSS Befehle packen vorzeichenbehaftete Datenelemente aus dem Quell- und dem Zieloperanden mit Saturation in vorzeichenbehaftete Datenelemente im Zieloperanden. Die ursprünglichen Werte des Zieloperanden werden nach der Konvertierung in die niederwertigen Bits des Ergebniswertes (im Zieloperanden) kopiert. Die konvertierten Daten des Quelloperanden finden sich nach der Befehlsausführung in den höherwertigen Bits des Zieloperanden.
PACKSSWB packt demnach vier vorzeichenbehaftete Wortwerte aus dem Quelloperanden und vier vorzeichenbehaftete Wortwerte aus dem Zieloperanden in acht vorzeichenbehaftete Bytes im Zieloperanden. Ist der vorzeichenbehaftete Wert eines Wortwertes größer oder kleiner als der Wertebereich eines vorzeichenbehafteten Bytes, so wird der Wert einer Saturation unterzogen. Dabei wird im Fall des Überlaufes das entsprechende Byte auf den Wert 7Fh (127d) oder im Fall eines Unterlaufs auf den Wert 80h (-128d) gesetzt.
Auf ähnliche Weise arbeitet PACKSDW, das jeweils zwei vorzeichenbehaftete Doubleword-Werte des Quell- und Zieloperanden in vier vorzeichenbehaftete Wortwerte im Zieloperanden konvertiert. Auch hier wird wieder Saturation angewendet und zu große (oder zu kleine) Werte geclippt. Im Falle eines Überlaufs wird der Wert auf 7FFFh (32767d) und im Fall eines Unterlaufs auf den Wert 8000h (-32768d) gesetzt.
MM0= 0370 0020 01A1 E2F2h ; Zieloperand MM1= 0010 0046 0092 1040h ; Quelloperand PACKSSWB MM0, MM1 ; Packen der Wortdaten in acht ; Byte mit Signed Saturation Ergebnis in MM0= 10 46 7F 7F 7F 20 7F 80h
PACKUSWB register, memory/register -- PACKen von vorzeichenbehafteten Word-Datenelementen mit UnSigned Saturation in Byte-Daten |
---|
Der PACKUSWB Befehl packt vier vorzeichenbehaftete Wortwerte im Quell- und vier vorzeichenbehaftete Word-Werte im Zieloperanden mit Saturation in acht vorzeichenlose Byte-Datenelemente im Zieloperanden. Die Saturation führt hier bei einem Überlauf des vorzeichenlosen Byte-Wertebereichs zum Wert FFh (255d) und im Fall eines Unterlaufs zum Wert 0.
MM0= 0370 0020 01A1 E2F2h ; Zieloperand MM1= 0010 0046 0092 1040h ; Quelloperand PACKUSWB MM0, MM1 ; Packen der Wortdaten in acht ; Byte mit Unsigned Saturation Ergebnis in MM0= 10 46 92 FF FF 20 FF 00h
Alle PUNPCKH-Befehle beachten jeweils nur die höherwertigen Datenelemente der angegebenen Operanden. Diese werden entpackt und abwechselnd im Zieloperanden gespeichert. Die niederwertigen Datenelemente werden von PUNPCKH ignoriert.
Der PUNPCKHBW Befehl entpackt und speichert die vier höherwertigen Bytes des Quell- und Zieloperanden abwechselnd als Wortwerte im Zieloperanden (siehe Beispiel).
Der PUNPCKHWD Befehl entpackt und speichert die zwei höherwertigen Wortwerte des Quell- und Zieloperanden abwechselnd als Doubleword-Werte im Zieloperanden.
Der PUNPCKHDQ Befehl entpackt und speichert das höherwertige Doubleword des Quell- und Zieloperanden abwechselnd als ein Quadword im Zieloperanden.
MM0= 03 70 00 20 01 A1 E2 F2h ; Zieloperand MM1= 40 50 60 70 40 40 40 40h ; Quelloperand ; Die kursiven Werte werden vom folgenden Befehl ignoriert. PUNPCKHBW MM0, MM1 Ergebnis in MM0= 40 03 50 70 60 00 70 20h
Alle PUNPCKL-Befehle beachten jeweils nur die niederwertigen Datenelemente der angegebenen Operanden. Diese werden entpackt und abwechselnd im Zieloperanden gespeichert. Die höherwertigen Datenelemente werden von PUNPCKL ignoriert.
Der PUNPCKLBW Befehl entpackt und speichert die vier niederwertigen Bytes des Quell- und Zieloperanden abwechselnd als Wortwerte im Zieloperanden (siehe Beispiel).
Der PUNPCKLWD Befehl entpackt und speichert die zwei niederwertigen Wortwerte des Quell- und Zieloperanden abwechselnd als Doubleword-Werte im Zieloperanden.
Der PUNPCKLDQ Befehl entpackt und speichert das niederwertige Doubleword des Quell- und Zieloperanden abwechselnd als ein Quadwort im Zieloperanden.
MM0= 03 70 00 20 01 A1 E2 F2h ; Zieloperand MM1= 40 50 60 70 40 50 60 70h ; Quelloperand ; Die kursiven Werte werden vom folgenden Befehl ignoriert. PUNPCKLBW MM0, MM1 Ergebnis in MM0= 40 01 50 A1 60 E2 70 F2h