You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
300 lines
10 KiB
HTML
300 lines
10 KiB
HTML
<HTML>
|
|
<HEAD>
|
|
<TITLE>MMX Erweiterung -- neue Befehle (Konvertierung)</TITLE>
|
|
<SCRIPT LANGUAGE="Javascript">
|
|
<!-- Test Browser Version
|
|
|
|
// Javascript written 1998 by Jens Hohmuth (Script-Version: 3.0)
|
|
// (c) Copyright 1998 by Jens Hohmuth@fh-zwickau.de. All rights reserved.
|
|
|
|
var browserok= 0;
|
|
var version= parseInt( navigator.appVersion );
|
|
|
|
if( version >= 3 ) browserok= 1;
|
|
if( document.images ) browserok= 1;
|
|
|
|
if( browserok )
|
|
{
|
|
var imgdata_touched = new Array();
|
|
var imgdata_released= new Array();
|
|
}
|
|
|
|
// load imagedata
|
|
function precache( name, pic1, pic2 )
|
|
{
|
|
if( browserok )
|
|
{
|
|
imgdata_touched [ name ]= new Image();
|
|
imgdata_touched [ name ].src= pic2;
|
|
imgdata_released[ name ]= new Image();
|
|
imgdata_released[ name ].src= pic1;
|
|
}
|
|
}
|
|
|
|
// "Release", called if mouse left button
|
|
function release( name )
|
|
{
|
|
if( browserok )
|
|
{
|
|
document.images[ name ].src= imgdata_released[ name ].src;
|
|
}
|
|
}
|
|
|
|
// "Touch", called if mouse over link-button
|
|
function touch( name )
|
|
{
|
|
if( browserok )
|
|
{
|
|
document.images[ name ].src= imgdata_touched[ name ].src;
|
|
}
|
|
}
|
|
|
|
// load (precache) Buttons
|
|
if( browserok )
|
|
{
|
|
precache( "left", "../images/arrowl.gif", "../images/arrowlp.gif" );
|
|
precache( "right", "../images/arrowr.gif", "../images/arrowrp.gif" );
|
|
precache( "index", "../images/index.gif", "../images/indexp.gif" );
|
|
}
|
|
//-->
|
|
</SCRIPT>
|
|
|
|
</HEAD>
|
|
|
|
<BODY BGCOLOR="#C0C0C0" BACKGROUND="../images/stone.jpg">
|
|
<TABLE BORDER=2 WIDTH="100%" >
|
|
<TR ALIGN=LEFT BGCOLOR="#800000">
|
|
<TH ALIGN=LEFT>
|
|
<FONT COLOR="#FF8080">
|
|
<H2>Konvertier-Befehle</H2>
|
|
</FONT>
|
|
</TH>
|
|
</TR></TABLE>
|
|
|
|
<BR>
|
|
|
|
<TABLE BORDER=2 WIDTH="100%" >
|
|
<TR ALIGN=LEFT BGCOLOR="#000080">
|
|
<TH ALIGN=LEFT>
|
|
<FONT COLOR="#C0C0FF">
|
|
|
|
<A NAME="PACKSSWB">
|
|
<U>PACKSSWB</U> register, memory/register -- <U>PACK</U>en von
|
|
<U>S</U>igned <U>W</U>ord-Daten in <U>B</U>ytes mit <U>S</U>igned
|
|
Saturation<BR>
|
|
</A>
|
|
|
|
<A NAME="PACKSSDW">
|
|
<U>PACKSSDW</U> register, memory/register -- <U>PACK</U>en von
|
|
vorzeichenbehafteten (<U>S</U>igned) <U>D</U>oubleword-
|
|
Daten in <U>W</U>ords mit <U>S</U>igned Saturation
|
|
</A>
|
|
|
|
</FONT>
|
|
</TH>
|
|
</TR></TABLE>
|
|
|
|
<P>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.</P>
|
|
|
|
<P>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.</P>
|
|
|
|
<P>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.</P>
|
|
|
|
<FONT COLOR="#0000FF"><PRE>
|
|
MM0= <FONT COLOR="#FF0000">0370 0020 01A1 E2F2h</FONT> ; Zieloperand
|
|
MM1= <FONT COLOR="#000000">0010 0046 0092 1040h</FONT> ; Quelloperand
|
|
|
|
PACKSSWB MM0, MM1 ; Packen der Wortdaten in acht
|
|
; Byte mit Signed Saturation
|
|
|
|
Ergebnis in MM0= <FONT COLOR="#000000">10 46 7F 7F</FONT> <FONT COLOR="#FF0000">7F 20 7F 80h</FONT>
|
|
</PRE></FONT>
|
|
|
|
<TABLE BORDER=2 WIDTH="100%" >
|
|
<TR ALIGN=LEFT BGCOLOR="#000080">
|
|
<TH ALIGN=LEFT>
|
|
<FONT COLOR="#C0C0FF">
|
|
|
|
<A NAME="PACKUSWB">
|
|
<U>PACKUSWB</U> register, memory/register -- <U>PACK</U>en von
|
|
vorzeichenbehafteten <U>W</U>ord-Datenelementen mit <U>U</U>n<U>S</U>igned
|
|
Saturation in <U>B</U>yte-Daten
|
|
</A>
|
|
|
|
</FONT>
|
|
</TH>
|
|
</TR></TABLE>
|
|
|
|
<P>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.</P>
|
|
|
|
<FONT COLOR="#0000FF"><PRE>
|
|
MM0= <FONT COLOR="#FF0000">0370 0020 01A1 E2F2h</FONT> ; Zieloperand
|
|
MM1= <FONT COLOR="#000000">0010 0046 0092 1040h</FONT> ; Quelloperand
|
|
|
|
PACKUSWB MM0, MM1 ; Packen der Wortdaten in acht
|
|
; Byte mit Unsigned Saturation
|
|
|
|
Ergebnis in MM0= <FONT COLOR="#000000">10 46 92 FF</FONT> <FONT COLOR="#FF0000">FF 20 FF 00h</FONT>
|
|
</PRE></FONT>
|
|
|
|
<TABLE BORDER=2 WIDTH="100%" >
|
|
<TR ALIGN=LEFT BGCOLOR="#000080">
|
|
<TH ALIGN=LEFT>
|
|
<FONT COLOR="#C0C0FF">
|
|
|
|
<A NAME="PUNPCKHBW">
|
|
<U>PUNPCKHBW</U> register, memory/register -- Entpacken
|
|
(<U>UNP</U>a<U>CK</U>) von ge<U>P</U>ackten <U>B</U>yte-Datenelementen
|
|
(höherwertige, <U>H</U>igh) in <U>W</U>ord-Daten<BR>
|
|
</A>
|
|
|
|
<A NAME="PUNPCKHWD">
|
|
<U>PUNPCKHWD</U> register, memory/register -- Entpacken
|
|
(<U>UNP</U>a<U>CK</U>) von ge<U>P</U>ackten <U>W</U>ord-Datenelementen
|
|
(höherwertige, <U>H</U>igh) in <U>D</U>oubleword-Daten<BR>
|
|
</A>
|
|
|
|
<A NAME="PUNPCKHDQ">
|
|
<U>PUNPCKHDQ</U> register, memory/register -- Entpacken
|
|
(<U>UNP</U>a<U>CK</U>) von ge<U>P</U>ackten <U>D</U>oubleword-
|
|
Datenelementen (höherwertige, <U>H</U>igh) in ein <U>Q</U>uadword
|
|
</A>
|
|
|
|
</FONT>
|
|
</TH>
|
|
</TR></TABLE>
|
|
|
|
<P>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.</P>
|
|
|
|
<P>Der PUNPCKHBW Befehl entpackt und speichert die vier
|
|
höherwertigen Bytes des Quell- und Zieloperanden abwechselnd
|
|
als Wortwerte im Zieloperanden (siehe Beispiel).</P>
|
|
|
|
<P>Der PUNPCKHWD Befehl entpackt und speichert die zwei
|
|
höherwertigen Wortwerte des Quell- und Zieloperanden abwechselnd
|
|
als Doubleword-Werte im Zieloperanden.</P>
|
|
|
|
<P>Der PUNPCKHDQ Befehl entpackt und speichert das höherwertige
|
|
Doubleword des Quell- und Zieloperanden abwechselnd als ein Quadword
|
|
im Zieloperanden.</P>
|
|
|
|
<FONT COLOR="#0000FF"><PRE>
|
|
MM0= <FONT COLOR="#FF0000">03 70 00 20</FONT> <I>01 A1 E2 F2</I>h ; Zieloperand
|
|
MM1= <FONT COLOR="#000000">40 50 60 70</FONT> <I>40 40 40 40</I>h ; Quelloperand
|
|
|
|
; Die kursiven Werte werden vom folgenden Befehl ignoriert.
|
|
|
|
PUNPCKHBW MM0, MM1
|
|
|
|
Ergebnis in MM0= <FONT COLOR="#000000">40</FONT> <FONT COLOR="#FF0000">03</FONT> <FONT COLOR="#000000">50</FONT> <FONT COLOR="#FF0000">70</FONT> <FONT COLOR="#000000">60</FONT> <FONT COLOR="#FF0000">00</FONT> <FONT COLOR="#000000">70</FONT> <FONT COLOR="#FF0000">20h</FONT>
|
|
</PRE></FONT>
|
|
|
|
<TABLE BORDER=2 WIDTH="100%" >
|
|
<TR ALIGN=LEFT BGCOLOR="#000080">
|
|
<TH ALIGN=LEFT>
|
|
<FONT COLOR="#C0C0FF">
|
|
|
|
<A NAME="PUNPCKLBW">
|
|
<U>PUNPCKLBW</U> register, memory/register -- Entpacken
|
|
(<U>UNP</U>a<U>CK</U>) von ge<U>P</U>ackten <U>B</U>yte-Datenelementen
|
|
(niederwertige, <U>L</U>ow) in <U>W</U>ord-Daten<BR>
|
|
</A>
|
|
|
|
<A NAME="PUNPCKLWD">
|
|
<U>PUNPCKLWD</U> register, memory/register -- Entpacken
|
|
(<U>UNP</U>a<U>CK</U>) von ge<U>P</U>ackten <U>W</U>ord-Datenelementen
|
|
(niederwertige, <U>L</U>ow) in <U>D</U>oubleword-Daten<BR>
|
|
</A>
|
|
|
|
<A NAME="PUNPCKLDQ">
|
|
<U>PUNPCKLDQ</U> register, memory/register -- Entpacken
|
|
(<U>UNP</U>a<U>CK</U>) von ge<U>P</U>ackten <U>D</U>oubleword-Datenelementen
|
|
(niederwertige, <U>L</U>ow) in ein <U>Q</U>uadword
|
|
</A>
|
|
|
|
</FONT>
|
|
</TH>
|
|
</TR></TABLE>
|
|
|
|
<P>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.</P>
|
|
|
|
<P>Der PUNPCKLBW Befehl entpackt und speichert die vier niederwertigen
|
|
Bytes des Quell- und Zieloperanden abwechselnd als Wortwerte im
|
|
Zieloperanden (siehe Beispiel).</P>
|
|
|
|
<P>Der PUNPCKLWD Befehl entpackt und speichert die zwei niederwertigen
|
|
Wortwerte des Quell- und Zieloperanden abwechselnd als
|
|
Doubleword-Werte im Zieloperanden.</P>
|
|
|
|
<P>Der PUNPCKLDQ Befehl entpackt und speichert das niederwertige
|
|
Doubleword des Quell- und Zieloperanden abwechselnd als ein Quadwort
|
|
im Zieloperanden.</P>
|
|
|
|
<FONT COLOR="#0000FF"><PRE>
|
|
MM0= <I>03 70 00 20</I> <FONT COLOR="#FF0000">01 A1 E2 F2h</FONT> ; Zieloperand
|
|
MM1= <I>40 50 60 70</I> <FONT COLOR="#000000">40 50 60 70h</FONT> ; Quelloperand
|
|
|
|
; Die kursiven Werte werden vom folgenden Befehl ignoriert.
|
|
|
|
PUNPCKLBW MM0, MM1
|
|
|
|
Ergebnis in MM0= <FONT COLOR="#000000">40</FONT> <FONT COLOR="#FF0000">01</FONT> <FONT COLOR="#000000">50</FONT> <FONT COLOR="#FF0000">A1</FONT> <FONT COLOR="#000000">60</FONT> <FONT COLOR="#FF0000">E2</FONT> <FONT COLOR="#000000">70</FONT> <FONT COLOR="#FF0000">F2h</FONT>
|
|
</PRE></FONT>
|
|
|
|
<!-- wie gehts weiter ------------------------------------------------------>
|
|
<P><HR SIZE=2></P>
|
|
<A HREF="mmx_6.htm" onMouseOver="touch( 'left' );" onMouseOut="release( 'left' );">
|
|
<IMG SRC="../images/arrowl.gif" NAME="left" ALT="zurueck" BORDER=0 ALIGN=LEFT></A>
|
|
|
|
<A HREF="mmx_8.htm" onMouseOver="touch( 'right' );" onMouseOut="release( 'right' );">
|
|
<IMG SRC="../images/arrowr.gif" NAME="right" ALT="weiter" BORDER=0 ALIGN=RIGHT></A>
|
|
|
|
<CENTER>
|
|
<A HREF="index.htm#Befehle" onMouseOver="touch( 'index' );" onMouseOut="release( 'index' );">
|
|
<IMG SRC = "../images/index.gif" NAME="index" ALT="Zum Index" BORDER=0></A>
|
|
</CENTER>
|
|
<BR>
|
|
|
|
<!-- Adresse --------------------------------------------------------------->
|
|
<HR SIZE=2>
|
|
<ADDRESS>
|
|
Probleme oder Vorschläge zu dieser Webseite, bitte per email an:
|
|
<A HREF="mailto:hohmuth@t-online.de">
|
|
<B>hohmuth@t-online.de</B>
|
|
</A>
|
|
<BR>
|
|
Letzte Änderungen am: 15.01.1998, Jens Hohmuth.
|
|
</ADDRESS>
|
|
</BODY>
|
|
</HTML>
|