Algorithm 版 (精华区)

发信人: sino (茶水博士), 信区: Theory
标  题: mmx体系结构和指令系统
发信站: 哈工大紫丁香 (Sun Aug 27 13:29:37 2000), 转信

发信人: penguin (奈何企鹅), 信区: algorithm
发信站: NJU Lily BBS (Fri Jun 18 16:07:01 1999), 站内信件

    MMX技术提供了面向多媒体和通信应用的新特性,但同时还保持了与现存 的Intel体
系结构(IA)CPU、IA应用和操作系统的向后兼容性。它的新 特性主要有: 
新的数据类型 
8个MMX寄存器 
改进的指令集 
利用MMX技术这些新特性的应用将在性能上有一定的提高。
一、新的数据类型 
     Intel的MMX技术中的主要数据类型是紧缩的定点整数。定点数的小数点 是隐含的,
并且可以让用户控制以增加灵活性。 
IA MMX技术定义了以下4中64-bit数据类型: 
紧缩字节(packed byte) 8个字节紧缩在1个64-bit中 
紧缩字(packed word) 4个字紧缩在1个64-bit中 
紧缩双字(packed doubleword) 2个双字紧缩在1个64-bit中 
四字(quadword) 1个64-bit 
二、MMX寄存器 
    IA MMX技术提供了8个64-bit的通用寄存器。这些寄存器实际上是浮点寄存 器的别名
映象。操作系统就象支持浮点一样支持MMX技术,例如,抢先式的 操作系统在多个应用之
间切换时负责保存现场,在MMX之前的操作系统设计 
了保存浮点寄存器的功能,由于MMX和浮点寄存器实际上是同一组寄存器, 所以,已有的
操作系统在MMX技术的CPU上可以同样正常工作。 
     MMX寄存器可以保存64-bit数据类型。MMX指令直接使用MMX寄存器的名字 MM0~MM7
进行访问。 MMX寄存器可以用来进行数据的运算。它们不能用来寻址,寻址必须使用 整
数寄存器和标准IA寻址模式。
三、扩展的指令集 
    IA MMX指令集支持对所有的紧缩数据类型进行并行操作的指令。MMX指令 可以对有符
号和无符号数据元素进行相应的操作。 
MMX指令实现了2个新的功能: 
紧缩数据操作 
饱和运算 
3.1 紧缩数据 
    MMX指令可以对成组的8字节、4字和2双字进行操作。这些成组的64-bit 被称为紧缩
数据。同样64-bit的数据可以被看作任何一种紧缩数据类型。 要操作的数据类型是由指
令的类型确定的。
     例如,PADDB(Add Packed Bytes)指令将两组紧缩8字节相加。PADDB (Add Pack
ed Words)指令可以相加紧缩字数据,它实际上和PADDB对 同样的64-bit数据操作,不过
是将64-bit看作是4个16-bit字。
3.2 饱和和环绕的运算方式 
     MMX技术支持一种新型算术运算机制──饱和运算。“饱和”这一概念是 和环绕运
算方式相对而言的。在环绕方式中,上溢和下溢的结果数值被 截断,仅仅保留结果的低
位部分,而进位就被忽略了。在环绕方式中,? 
运算的结果如果上溢或者下溢,就将其数值限定在该数据类型所允许的 值域的上限或者
下限上。也就是说,运算的结果若大于允许的数值范围 ,就将其“饱和”在所允许的最
大值;运算结果如果小于允许的数值, 就饱和在值域的最小值。这种运算方式在许多应
用中是十分必要的,如 
在色彩的计算中。 
    例如,当有符号数据类型的运算结果大于值域上限时,它就会饱和在 0x7F上(对无
符号数,为0xFF)。如果有符号数的运算结果小于允许的 下限,它就会饱和在0x80上(
对无符号数,为0x00)。
    饱和运算方式提供了一个十分有用的特性,避免了环绕方式的缺点。在 色彩运算的
应用中,饱和运算使得运算出来的色彩如果“溢出”的话, 仍保持全黑或全白,而不会
产生象环绕运算方式下的色彩反转的现象。
下限 上限 
有符号 16进制 80H 8000H 
10进制 -128 -32768 
16进制 7FH 7FFFH 
10进制 127 32767 
字节 字 
无符号 00H 0000H 
0 0 
FFH FFFFH 
255 65535 
字节 字 
注意,MMX指令并不通过产生异常或设置标志位来指明下溢或上溢的发生。 
四、指令集概要 
MMX技术给CPU指令集增加了57条新指令,它们可以分为7类: 
1. 算术指令 
2. 比较指令 
3. 转换指令 
4. 逻辑指令 
5. 移位指令 
6. 数据传输指令 
7. 清空MMX状态(EMMS)指令 

下面分别做一下介绍: 
4.1算术指令 
紧缩加和紧缩减 
    PADD(Packed Add,紧缩加法)和PSUB(Packed Subtract,紧缩减法) 指令在环绕
模式下进行有符号数或者无符号数的加或减的操作。这些指 令支持紧缩字节,紧缩字和
紧缩双字的数据类型。 
    PADDS(Packed Add with Saturation)和PSUBS(Packed Subtract with Saturati
on)指令在饱和模式下对有符号数进行加或减的操作。这些指 令只支持紧缩字节和紧缩
字两种数据类型。 
     PADDUS(Packed Add Unsigned with Saturation)和PSUBUS(Packed Subtract U
nsigned with Saturation)指令在饱和模式下进行无符号数 的加减操作。它们也只支持
紧缩字节和紧缩字的运算。 
紧缩乘 
    紧缩乘指令同时对4对16-bit有符号操作数进行4个乘法操作,产生相应的 32-bit的
中间结果。程序员可以选择每个32-bit中间结果的高位部分或者 低位部分作为最终结果
。 
    PMULHW(Packed Multiply High)和PMULLW(Packed Multiply Low)指 令计算有符
号操作数(16-bit字)的乘积,并将每个结果的高16位或者低 16位写入目标操作数。 
紧缩乘加 
    PMADDWD(Packed Multiply and Add)指令计算有符号操作数(16-bit字) 的乘积
,并将产生的4个32-bit中间结果分为两组相加,得到2个32-bit双 字结果。
4.2比较指令 
    PCMPEQ(Packed Compare for Equal)和PCMPGT(Packed Compare for Greater Th
an)指令按照相等或大于的要求分别比较源操作数和目的操作 数中的各个相关数据元素
。由比较结果,这些指令产生全1或全0的屏蔽位, 
存入目的操作数中,不设置标志位。逻辑指令可以运用这些屏蔽位进行选 择。这可以实
现紧缩数据类型下的条件赋值操作,而不必采用分支指令。 这些指令支持紧缩字节、紧
缩字和紧缩双字的数据类型。 
4.3转换指令 
紧缩和展开指令在紧缩数据类型之间进行转换操作。 
    PACKSS(Packed with Signed Saturation)指令在饱和模式下将有符号 的字转换为
有符号的字节,或将有符号双字转换为有符号字。 
     PACKUS(Packed with Unsigned Saturation)指令在无符号饱和模式下 ,将有符
号的字转换为无符号的字节。 
    PUNPCKH(Unpacked High Packed Data)和PUMPCKL(Unpack Low Packed Data)指
令将字节转换为字,字转换为双字,将双字转换为四字。 
4.4逻辑指令 
PAND(Bitwise Logical And)、PANDN(Bitwise Logical And Not)、 
POR(Bitwise Logical OR)和PXOR(Bitwise Logical Exclusive OR) 
指令对64-bit数值进行按位进行逻辑操作。 
4.5移位指令 
    逻辑右移、逻辑左移和算术右移指令对每个数据元素进行一定位数的移位 操作。逻
辑右移和逻辑左移还可以将64-bit(四字)作为一个块进行移位, 对于数据类型转换和
对准操作十分有用。 
    PSLL(Packed Shift Left Logical)和PSR(Packed Shift Right Logical)指令进
行左移和右移操作,并将移位产生的空位以0补齐。这两 个指令支持紧缩字、紧缩双字和
四字数据类型。 
    PSRA(Packed Shift Right Arithmetic)指令进行算术右移操作,将符号 位拷贝到
操作数高位的空位中。该指令支持紧缩字和紧缩双字。 
4.6数据传输指令 
    MOVD(Move 32 Bits)指令将32-bit的紧缩数据在内存和MMX寄存器间, 或者整数寄
存器和MMX寄存器之间传送。 
     MOVQ(Move 64 Bits)指令将64-bit的紧缩数据在内存和MMX寄存器间, 或者MMX寄
存器之间进行传送。
4.7 EMMS(Empty MMX State,清空MMX状态)指令 
    EMMS指令负责清空MMX状态。在MMX程序段的末尾需要调用含有浮点指令的 其它程序
段时,必须用该指令清除IA MMX状态(即清空浮点标记字)。 
五、指令操作数 
    除了EMMS以外的所有MMX指令,都要引用和操作2个操作数:源操作数和 目的操作数
。指令表示中的右操作数源操作数,左操作数为目的操作数 。目的操作数也可以成为另
一个源操作数。指令将结果覆盖写入目的操 作数中。 
    例如,一个两操作数的指令被解码为: 
DEST(left operand) ?DEST(left operand) OP SRC(right operand) 
    所有MMX指令(除数据传输指令)的源操作数可以是内存中的或者MMX寄 存器中的,
但是目的操作数只能是MMX寄存器中的。 
     对于数据传输指令,源和目的操作数还可以是整数寄存器(对MOVD指令 而言)或者
内存地址(MOVD和MOVQ指令)。 
六、兼容性 
    IA MMX状态是浮点状态的异名(alias),并没有新的状态和模式支持 MMX技术。保
存和恢复浮点状态的浮点指令也会处理IA MMX状态(例如, 在进程上下文转换中)。因
此,实际上MMX技术在浮点体系结构和操作 系统之间使用了同样的接口技术(主要是指任
务切换)。 
 
 

--
※ 修改:.fib 於 Aug 27 13:27:14 修改本文.[FROM: bbs.hit.edu.cn]
--
※ 转寄:.南京大学小百合 bbs.nju.edu.cn.[FROM: bbs.hit.edu.cn]

--
☆ 来源:.哈工大紫丁香 bbs.hit.edu.cn.[FROM: fib.bbs@bbs.nju.edu.]
[百宝箱] [返回首页] [上级目录] [根目录] [返回顶部] [刷新] [返回]
Powered by KBS BBS 2.0 (http://dev.kcn.cn)
页面执行时间:6.674毫秒