Escolar Documentos
Profissional Documentos
Cultura Documentos
The new instructions are designed for applications such as motion video, combined graphics with video, image processing, audio synthesis, speech synthesis and compression, telephony, video conferencing, 2D graphics, and 3D graphics.
Data Types
MMX architecture new packed data types:
eight packed, consecutive 8-bit bytes four packed, consecutive 16-bit words two packed, consecutive 32-bit doublewords
Bytes in this multibyte form have consecutive memory addresses and use the little endian form, as with other Intel data. See Figure 1 for the format for these new data types.
MMX technology registers have the same format as a 64-bit quantity in memory and have two data access modes:
64-bit access mode, for 64-bit memory and registers transfers for most instructions 32-bit access mode for 32-bit memory and register transfers for most instructions
32-bit transfers occur between processor registers. 64-bit transfers occur between floating-point coprocessor registers.
Fig 2 shows the internal register set of MMX technology extensions and how it uses the floating-point coprocessor register set.
called aliasing because the floating-point registers are shared as the MMX registers
Figure 2 The structure of the MMX register set. Note that MM0 and FF0 through MM7 and FP7 interchange with each other.
Instruction Set
The instruction for MMX technology includes arithmetic, comparison, conversion, logical, shift, and data transfer instructions. The instruction types are similar to the microprocessors instruction set.
MMX instructions use data types shown in Fig 1 instead of the normal data types used with the microprocessor
Arithmetic Instructions
Addition, subtraction, multiplication, a special multiplication with an addition, and others. PADD and PSUB instructions add or subtract packed signed or unsigned packed bytes, packed words, or packed doubleword data.
the add instructions are appended by B, W, or D to select size, as in PADDB for a byte, PADDW for a word, and PADDD for a doubleword
PMULHW & PMULLW perform multiplication on four pairs of 16-bit operands, producing 32-bit results.
PMULHW multiplies the high-order 16 bits PMULLW multiplies the low-order 16 bits
The MMX instructions use operands just as the integer or floating-point instructions do.
Comparison Instructions
There are two comparison instructions:
PCMPEQ (equal) & PCMPGT (greater than)
Conversion Instructions
Two basic conversion instructions: PACK, available as PACKSS (signed saturation) and PACKUS (unsigned saturation). PUNPCK, available as PUNPCKH (unpack high data) and PUNPCKL (unpack low data) Appended with B, W, or D for byte, word, and doubleword pack and unpack.
but must be used in combinations WB (word to byte) or DW (doubleword to word)
Logic Instructions
PAND (AND) PANDN (NAND) POR (OR) PXOR (Exclusive-OR). These do not have size extensions & perform bit-wise operations on all 64 bits of the data.
Shift Instruction
Logical shifts and arithmetic shift right instructions. Logic shifts are PSLL (left) and PSRL (right).
variations are word (W), doubleword (D), and quadword (Q)
The PSRA (arithmetic right shift) instruction functions in the same manner as the logical shifts.
except the sign-bit is preserved
MOVED transfers 32 bits of data between an integer register or memory location and an MMX register. MOVEQ copies all 64 bits of an MMX register between memory or another MMX register.
MOVEQ MM2, MM3 transfers all 64 bits of MM3 into MM2
EMMS Instruction
EMMS (empty MMX-state) sets (11) all the tags in the floatingpoint unit, so the floating-point registers are listed as empty. Must be executed before the return instruction at the end of any MMX procedure.
or a subsequent floating-point operation will cause a floating-point interrupt error, crashing Windows or any other application
All other MMX instructions clear the tags, indicating all floating-point registers are in use.
Instruction Listing
Table 1 lists all MMX instructions with the machine code so they can be used with the assembler. MASM does not support these instructions unless you have the latest version (6.15). Any MMX instruction can be used inside Visual C++ using the inline assembler.