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.

497 lines
16 KiB
HTML

<HTML>
<HEAD>
<TITLE>MMX Erweiterung -- neue Befehle (Arithmetische Befehle)</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>Arithmetische 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="PADDB">
<U>PADDB</U> register, memory/register -- <U>ADD</U>ition von
ge<U>P</U>ackten <U>B</U>ytedaten (OHNE Saturation)<BR>
</A>
<A NAME="PADDW">
<U>PADDW</U> register, memory/register -- <U>ADD</U>ition von
ge<U>P</U>ackten <U>W</U>ord-Daten (OHNE Saturation)<BR>
</A>
<A NAME="PADDD">
<U>PADDD</U> register, memory/register -- <U>ADD</U>ition von
ge<U>P</U>ackten <U>D</U>oubleword-Daten (OHNE Saturation)<BR>
</A>
</FONT>
</TH>
</TR></TABLE>
<P>Die hier dargestellten PADD-Befehle addieren die gepackten
Datenelemente im Quelloperanden zu den gepackten Datenelementen
im Zieloperanden. Das Ergebnis dieser Addition befindet sich im
Zieloperanden und wird keiner Saturation unterzogen. Das hei&szlig;t,
im entsprechend gepackten Datenfeld befinden sich (im Falle eines
&Uuml;berlaufs) jeweils nur die unteren Bits (bei Byte die unteren
8-Bit, bei Word die unteren 16-Bit und bei Doubleword die unteren
32-Bit) des korrekten Ergebnisses.</P>
<FONT COLOR="#0000FF"><PRE>
MM0= 03 70 00 20 01 A1 E2 F2h ; Zieloperand
MM1= 40 40 40 40 40 40 40 40h ; Quelloperand
PADDB MM0, MM1 ; Addition der gepackten
; Bytedaten in MM1 auf die
; gepackten Bytedaten in MM0
; (ohne Saturation !)
Ergebnis in MM0= 43 B0 40 60 41 E1 22 32h
</PRE></FONT>
<TABLE BORDER=2 WIDTH="100%" >
<TR ALIGN=LEFT BGCOLOR="#000080">
<TH ALIGN=LEFT>
<FONT COLOR="#C0C0FF">
<A NAME="PADDSB">
<U>PADDSB</U> register, memory/register -- <U>ADD</U>ition von
ge<U>P</U>ackten <U>B</U>ytedaten mit <U>S</U>igned Saturation<BR>
</A>
<A NAME="PADDSW">
<U>PADDSW</U> register, memory/register -- <U>ADD</U>ition von
ge<U>P</U>ackten <U>W</U>ord-Daten mit <U>S</U>igned Saturation<BR>
</A>
</FONT>
</TH>
</TR></TABLE>
<P>Die PADDS-Befehle addieren die gepackten Datenelemente im
Quelloperanden zum Zieloperanden. Dabei wird im Fall eines &Uuml;ber-
oder Unterlaufs das Ergebnis einer vorzeichenbehafteten Saturation
unterzogen.</P>
<P>PADDSB addiert die gepackten Bytedaten im Quelloperanden zu den
gepackten Bytedaten im Zieloperanden. Das Ergebnis der Addition
befindet sich im Zieloperanden. Bei einem &Uuml;berlauf wird das
entsprechende Byte auf den Wert 7Fh (127d) und bei einem Unterlauf
auf den Wert 80h (-128d) gesetzt.</P>
<P>PADDSW addiert die gepackten Word-Daten im Quelloperanden zu den
gepackten Word-Daten im Zieloperanden. Das Ergebnis der Addition
befindet sich im Zieloperanden. Bei einem &Uuml;berlauf wird das
entsprechende Wort auf den Wert 7FFFh (32767d) und bei einem Unterlaufs
auf den Wert 8000h (-32768d) gesetzt.</P>
<FONT COLOR="#0000FF"><PRE>
MM0= 03 70 00 20 01 A1 E2 F2h ; Zieloperand
MM1= 40 40 40 40 40 40 40 40h ; Quelloperand
PADDSB MM0, MM1 ; Addition der gepackten
; Bytedaten in MM1 auf die
; gepackten Bytedaten in MM0
; (mit Signed Saturation !)
Ergebnis in MM0= 43 <U>7F</U> 40 60 41 E1 22 32h
</PRE></FONT>
<TABLE BORDER=2 WIDTH="100%" >
<TR ALIGN=LEFT BGCOLOR="#000080">
<TH ALIGN=LEFT>
<FONT COLOR="#C0C0FF">
<A NAME="PADDUSB">
<U>PADDUSB</U> register, memory/register -- <U>ADD</U>ition von
ge<U>P</U>ackten <U>B</U>ytedaten mit <U>U</U>n<U>S</U>igned Saturation<BR>
</A>
<A NAME="PADDUSW">
<U>PADDUSW</U> register, memory/register -- <U>ADD</U>ition von
ge<U>P</U>ackten <U>W</U>ord-Daten mit <U>U</U>n<U>S</U>igned Saturation<BR>
</A>
</FONT>
</TH>
</TR></TABLE>
<P>Die PADDUS-Befehle addieren die gepackten Datenelemente im
Quelloperanden zum Zieloperanden. Dabei wird im Fall eines
&Uuml;berlaufs das Ergebnis einer vorzeichenlosen
Saturation unterzogen.</P>
<P>PADDUSB addiert die gepackten Bytedaten im Quelloperanden
zu den gepackten Bytedaten im Zieloperanden. Das Ergebnis der
Addition befindet sich im Zieloperanden. Bei einem &Uuml;berlauf
wird das entsprechende Byte auf den Wert FFh (255d) gesetzt.</P>
<P>PADDSW addiert die gepackten Word-Daten im Quelloperanden zu
den gepackten Word-Daten im Zieloperanden. Das Ergebnis der Addition
befindet sich im Zieloperanden. Bei einem &Uuml;berlauf wird das
entsprechende Wort auf den Wert FFFFh (65535d) gesetzt.</P>
<FONT COLOR="#0000FF"><PRE>
MM0= 03 70 00 20 01 A1 E2 F2h ; Zieloperand
MM1= 40 40 40 40 40 40 40 40h ; Quelloperand
PADDUSB MM0, MM1 ; Addition der gepackten
; Bytedaten in MM1 auf die
; gepackten Bytedaten in MM0
; (mit Unsigned Saturation !)
Ergebnis in MM0= 43 B0 40 60 41 E1 <U>FF</U> <U>FF</U>h
</PRE></FONT>
<TABLE BORDER=2 WIDTH="100%" >
<TR ALIGN=LEFT BGCOLOR="#000080">
<TH ALIGN=LEFT>
<FONT COLOR="#C0C0FF">
<A NAME="PMADDWD">
<U>PMADDWD</U> register, memory/register -- ge<U>P</U>ackte
<U>M</U>ultiplikation und <U>ADD</U>ition von <U>W</U>ord-Daten zu
<U>D</U>oubleword-Daten
</A>
</FONT>
</TH>
</TR></TABLE>
<P>Der PMADDWD-Befehl multipliziert die vier (vorzeichenbehafteten)
Wortwerte des Zieloperanden mit den vier (vorzeichenbehafteten)
Wortwerten des Quelloperanden. Das Ergebnis sind vier 32-Bit
breite Doubleword-Werte (nur als Zwischenergebnis). Anschlie&szlig;end
werden die beiden h&ouml;herwertigen Doubleword-Werte addiert
und als h&ouml;herwertiges Doubleword im Zieloperanden gespeichert. Die
Summe der beiden niederwertigen Doubleword-Werte wird im unteren Doubleword des
Zieloperanden gespeichert.</P>
<FONT COLOR="#0000FF"><PRE>
MM0= 0002 7000 0001 0006h ; Zieloperand
MM1= 0002 0004 0003 0002h ; Quelloperand
PMADDWD MM0, MM1
; Zwischenergebnis nach Multiplikation
<FONT COLOR="#000000">(0000)</FONT>0004<FONT COLOR="#FF0000">+</FONT><FONT COLOR="#000000">(0001)</FONT>C000 <FONT COLOR="#000000">(0000)</FONT>0003<FONT COLOR="#FF0000">+</FONT><FONT COLOR="#000000">(0000)</FONT>000Ch
; Ergebnis nach <FONT COLOR="#FF0000">Addition</FONT>
MM0= 0001C004 0000000Fh
</PRE></FONT>
<TABLE BORDER=2 WIDTH="100%" >
<TR ALIGN=LEFT BGCOLOR="#000080">
<TH ALIGN=LEFT>
<FONT COLOR="#C0C0FF">
<A NAME="PMULHW">
<U>PMULHW</U> register, memory/register -- ge<U>P</U>ackte
<U>MUL</U>tiplikation von (vorzeichenbehafteten) <U>W</U>ord-
Daten; Speicherung des H&ouml;herwertigen (<U>H</U>igh) - Anteils
der L&ouml;sung
</A>
</FONT>
</TH>
</TR></TABLE>
<P>Der PMULHW-Befehl multipliziert die vier vorzeichenbehafteten
Wortwerte des Zieloperanden mit den vier vorzeichenbehafteten
Wortwerten des Quelloperanden. Die h&ouml;herwertigen 16-Bit der
jeweils 32-Bit breiten Ergebnisse werden im Zieloperanden
gespeichert.</P>
<FONT COLOR="#0000FF"><PRE>
MM0= 0100 0200 F400 0004h ; Zieloperand
MM1= 1000 2000 4000 4000h ; Quelloperand
PMULHW MM0, MM1
; Zwischenergebnis nach Multiplikation
<FONT COLOR="#FF0000">0010</FONT>0000 <FONT COLOR="#FF0000">0040</FONT>0000 <FONT COLOR="#FF0000">FD00</FONT>0000 <FONT COLOR="#FF0000">0001</FONT>0000h
; nur die hervorgehobenen, High-Anteile werden im Zieloperanden gespeichert
Ergebnis in MM0= 0010 0040 FD00 0001h
</PRE></FONT>
<TABLE BORDER=2 WIDTH="100%" >
<TR ALIGN=LEFT BGCOLOR="#000080">
<TH ALIGN=LEFT>
<FONT COLOR="#C0C0FF">
<A NAME="PMULLW">
<U>PMULLW</U> register, memory/register -- ge<U>P</U>ackte
<U>MUL</U>tiplikation von (vorzeichenbehafteten) <U>W</U>ord-Daten;
Speicherung des Niederwertigen (<U>L</U>ow) - Anteils der
L&ouml;sung
</A>
</FONT>
</TH>
</TR></TABLE>
<P>Der PMULLW-Befehl multipliziert die vier Wortwerte des
Zieloperanden mit den vier Wortwerten des Quelloperanden.
Die niederwertigen 16-Bit der jeweils 32-Bit breiten Ergebnisse
werden im Zieloperanden gespeichert.</P>
<FONT COLOR="#0000FF"><PRE>
MM0= 0001 0002 0003 0004h ; Zieloperand
MM1= 1000 2000 3000 4000h ; Quelloperand
PMULLW MM0, MM1
; Zwischenergebnis nach Multiplikation
0000<FONT COLOR="#FF0000">1000</FONT> 0000<FONT COLOR="#FF0000">4000</FONT> 0000<FONT COLOR="#FF0000">9000</FONT> 0001<FONT COLOR="#FF0000">0000h</FONT>
; nur die hervorgehobenen, Low-Anteile werden im Zieloperanden gespeichert
Ergebnis in MM0= 1000 4000 9000 0000h
</PRE></FONT>
<TABLE BORDER=2 WIDTH="100%" >
<TR ALIGN=LEFT BGCOLOR="#000080">
<TH ALIGN=LEFT>
<FONT COLOR="#C0C0FF">
<A NAME="PSUBB">
<U>PSUBB</U> register, memory/register -- <U>SUB</U>traktion von
ge<U>P</U>ackten <U>B</U>yte-Daten<BR>
</A>
<A NAME="PSUBW">
<U>PSUBW</U> register, memory/register -- <U>SUB</U>traktion von
ge<U>P</U>ackten <U>W</U>ord-Daten<BR>
</A>
<A NAME="PSUBD">
<U>PSUBD</U> register, memory/register -- <U>SUB</U>traktion von
ge<U>P</U>ackten <U>D</U>oubleword-Daten
</A>
</FONT>
</TH>
</TR></TABLE>
<P>Die PSUB-Befehle subtrahieren die gepackten Datenelemente des
Quelloperanden von den gepackten Datenelementen des Zieloperanden.
Das Ergebnis befindet sich nach der Operation im Zieloperanden,
wobei &Uuml;ber- oder Unterl&auml;ufe nicht verhindert werden.</P>
<P>Der PSUBB-Befehl subtrahiert die gepackten Byte-Datenelemente
des Quelloperanden von den gepackten Byte-Datenelementen des
Zieloperanden. Das Ergebnis der Subtraktion befindet sich im
Zieloperanden. Ist es zu gro&szlig; oder zu klein, werden nur die
unteren 8-Bit des Ergebniswertes gespeichert.</P>
<P>Der PSUBW-Befehl subtrahiert die gepackten Word-Datenelemente
des Quelloperanden von den gepackten Word-Datenelementen des
Zieloperanden. Das Ergebnis der Subtraktion befindet sich im
Zieloperanden. Ist es zu gro&szlig; oder zu klein, werden nur die
unteren 16-Bit des Ergebniswertes gespeichert.</P>
<P>Der PSUBD-Befehl subtrahiert die gepackten Doubleword-Datenelemente
des Quelloperanden von den gepackten Doubleword-Datenelementen des
Zieloperanden. Das Ergebnis der Subtraktion befindet sich im
Zieloperanden. Ist es zu gro&szlig; oder zu klein, werden nur die unteren
32-Bit des Ergebniswertes gespeichert.</P>
<FONT COLOR="#0000FF"><PRE>
MM0= 03 70 00 20 01 A1 E2 F2h ; Zieloperand
MM1= 40 40 40 40 40 40 40 40h ; Quelloperand
PSUBB MM0, MM1
Ergebnis in MM0= C3 30 C0 E0 C1 61 A2 B2h
</PRE></FONT>
<TABLE BORDER=2 WIDTH="100%" >
<TR ALIGN=LEFT BGCOLOR="#000080">
<TH ALIGN=LEFT>
<FONT COLOR="#C0C0FF">
<A NAME="PSUBSB">
<U>PSUBSB</U> register, memory/register -- <U>SUB</U>traktion von
ge<U>P</U>ackten <U>B</U>yte-Daten mit <U>S</U>igned Saturation<BR>
</A>
<A NAME="PSUBSW">
<U>PSUBSW</U> register, memory/register -- <U>SUB</U>traktion von
ge<U>P</U>ackten <U>W</U>ord-Daten mit <U>S</U>igned Saturation
</A>
</FONT>
</TH>
</TR></TABLE>
<P>Die PSUBS-Befehle subtrahieren die gepackten Datenelemente des
Quelloperanden von den gepackten Datenelementen des Zieloperanden.
Dabei wird das Ergebnis im Zieloperanden gespeichert und einer
vorzeichenbehafteten Saturation unterzogen.</P>
<P>Der PSUBSB-Befehl f&uuml;hrt die Subtraktion mit gepackten
Byte-Daten durch. Das Ergebnis befindet sich nach der Operation
im Zieloperanden. Dabei wird im Fall eines &Uuml;berlaufs der
entsprechende Byte-Wert auf 7Fh (127d) und bei einem Unterlauf
auf 80h (-128d) gesetzt.</P>
<P>Der PSUBSW-Befehl f&uuml;hrt die Subtraktion mit gepackten
Word-Daten durch. Das Ergebnis befindet sich nach der Operation im
Zieloperanden. Dabei wird im Fall eines &Uuml;berlaufs der entsprechende
Wortwert auf 7FFFh (32767d) und bei einem Unterlauf auf 8000h (-32768d)
gesetzt.</P>
<FONT COLOR="#0000FF"><PRE>
MM0= 03 70 00 20 01 A1 E2 F2h ; Zieloperand
MM1= 40 40 40 40 40 40 40 40h ; Quelloperand
PSUBSB MM0, MM1
Ergebnis in MM0= C3 30 C0 E0 C1 <U>80</U> A2 B2h
</PRE></FONT>
<TABLE BORDER=2 WIDTH="100%" >
<TR ALIGN=LEFT BGCOLOR="#000080">
<TH ALIGN=LEFT>
<FONT COLOR="#C0C0FF">
<A NAME="PSUBUSB">
<U>PSUBUSB</U> register, memory/register -- <U>SUB</U>traktion von
ge<U>P</U>ackten <U>B</U>yte-Daten mit <U>U</U>n<U>S</U>igned
Saturation<BR>
</A>
<A NAME="PSUBUSW">
<U>PSUBUSW</U> register, memory/register -- <U>SUB</U>traktion von
ge<U>P</U>ackten <U>W</U>ord-Daten mit <U>U</U>n<U>S</U>igned
Saturation<BR>
</A>
</FONT>
</TH>
</TR></TABLE>
<P>Die PSUBUS-Befehle subtrahieren die gepackten Datenelemente
des Quelloperanden von den gepackten Datenelementen des Zieloperanden.
Dabei wird das Ergebnis im Zieloperanden gespeichert und einer
vorzeichenlosen Saturation unterzogen.</P>
<P>Der PSUBUSB-Befehl f&uuml;hrt die Subtraktion mit gepackten
Byte-Daten durch. Das Ergebnis befindet sich nach der Operation im
Zieloperanden. Dabei wird im Fall eines Unterlaufs das entsprechende
Byte auf den Wert 0 gesetzt.</P>
<P>Der PSUBUSW-Befehl f&uuml;hrt die Subtraktion mit gepackten
Word-Daten durch. Das Ergebnis befindet sich nach der Operation im
Zieloperanden. Dabei wird im Fall eines Unterlaufs das
entsprechende Wort auf den Wert 0 gesetzt.</P>
<FONT COLOR="#0000FF"><PRE>
MM0= 03 70 00 20 01 A1 E2 F2h ; Zieloperand
MM1= 40 40 40 40 40 40 40 40h ; Quelloperand
PSUBUSB MM0, MM1
Ergebnis in MM0= <U>00</U> 30 <U>00</U> <U>00</U> <U>00</U> 61 A2 B2h
</PRE></FONT>
<!-- wie gehts weiter ------------------------------------------------------>
<P><HR SIZE=2></P>
<A HREF="mmx_7.htm" onMouseOver="touch( 'left' );" onMouseOut="release( 'left' );">
<IMG SRC="../images/arrowl.gif" NAME="left" ALT="zurueck" BORDER=0 ALIGN=LEFT></A>
<A HREF="mmx_9.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&auml;ge zu dieser Webseite, bitte per email an:
<A HREF="mailto:hohmuth@t-online.de">
<B>hohmuth@t-online.de</B>
</A>
<BR>
Letzte &Auml;nderungen am: 23.02.1998, Jens Hohmuth.
</ADDRESS>
</BODY>
</HTML>