您的位置: 网站首页 > 程序开发 > 汇编语言与微机原理教程 > 第9章 80x86的寻址方式与指令系统 > 【9.3.9 80x86的多媒体扩展指令集】

9.3.9 80x86的多媒体扩展指令集

 

9.3.9  80x86的多媒体扩展指令集

SIMDSingle Instruction Multiple Data,单指令多数据)一条指令能处理多个数据,使操作的并行性进一步增强,提高了计算机的多媒体处理能力。

SIMD指令集是开放的,包括MMX3DNow!SSE等。

1MMX指令集

音像、图形、通信、虚拟现实等技术使计算机处理的信息量呈指数级增长,通用CPU一时难以满足要求,于是出现各种专用数字信号处理器DSP)和由其构成的板卡音频卡、视频卡、3D图形加速卡、电影回放卡、网络卡等),使主机箱内插卡增多,降低了整机可靠性,有时还会造成地址和中断冲突等。对游戏、音乐合成、语音压缩/解压、图像图形处理、MPEG视频等应用程序分析,它们具有以下一些共同特征。

·    短整数数据类型(像素为8/16位,音频为16位)。

·    频繁的乘与累加,高度重复的小循环体。

·    巨大计算量的算法。

·    高度并行操作。

针对上述分析结果,Intel公司在第五代微处理器中开发了MMX技术。MMX技术借用现成的浮点堆栈生成864MMX寄存器,MMX寄存器支持4种新型数据类型:紧缩字节8个字节)、紧缩字4个字)、紧缩双字两个双字)和四字,可将它们移入MMX寄存器同时完成对多个数据的算术运算和逻辑运算。

MMX指令有57条,包括:算术运算加、减、乘、除、算术移位和累加)、比较、逻辑操作与、与非、或、异或)、转换操作把数据紧缩和拆放)、移位操作、移数MMX寄存器之间、MMX寄存器与存储单元之间移入/移出)。这些指令按功能分组如表9-9所示。

9-9  MMX指令分类

种类

助记符

操作码字节数

主要操作

算术

操作

PADD<BWD>

3

循环加字节、字、双字)

PADDS<BW>

2

有符号饱和加字节、字)

PADDUS  <BW>

2

无符号饱和加字节、字)

PSUB  <BWD>

3

循环减字节、字、双字)

PSUBS  <BW>

2

有符号饱和减((字节、字)

PSUBUS  <BW>

2

无符号饱和减字节、字)

PMULHW

1

紧缩字高位相乘

PMULLW

1

紧缩字低位相乘

PMADDWD

1

紧缩字相乘并结果累加

移位

操作

PSIL<WDQ>

6

紧缩逻辑左移字、双字、四字)

PSRL<WDQ>

6

紧缩逻辑右移字、双字、四字或立即数)

PSRA<WDQ>

6

紧缩算术右移字、双字、四字或立即数)

比较

PCMPEQ<BWD>

3

紧缩比较是否相等字节、字、双字)

PCMPGT<BWD>

3

紧缩比较是否大于字节、字、双字)

逻辑

操作

PAND

1

与操作

PANDN

1

与非操作

POR

1

或操作

PXOR

1

异或操作

转换

操作

PACKUSWB

1

把字压缩成字节无符号)

PACKSS<WBDW>

2

压缩字变成字节、双字变成字)有符号)

PUNPCKH<BWWDDQ>

3

MMX寄存器中拆放高位字节、字、双字)

PUNPCKL<BWWDDQ>

3

MMX寄存器中拆放低位字节、字、双字)

移数

MOV<DQ>

4

MMX寄存器中移入/移出双字、四字)

状态

EMMS

1

MMX状态清除

注:指令助记符后尖括号内的字母表示该指令支持的数据类型,B—字节,W—字,D—对字,Q—四字。

23DNow!指令集

针对MMX浮点运算的不足,AMD公司在MMX技术基础上设计了3DNow!指令来改善浮点运算,以适应需要大量单精度浮点运算的3D图像处理。

3DNow!将原先的64MMX寄存器加以延伸,改造成83D运算寄存器充分利用浮点堆栈80位宽度),使其可以拆成两个32位浮点数,具备24位单精度。3DNow!MMX基础上增加了21条新的多媒体处理指令,包括一条快速进入/退出多媒体执行状态指令、一条数据预取指令、两条数据格式转换指令、两条整数运算指令和15条单精度浮点运算指令。

采用3DNow!技术在最优化的程序执行状态下,处理器在一个时钟周期内可处理4个浮点运算,在几个时钟周期内可完成816个浮点数的累乘和累加,浮点运算速度比80x87快几倍到几十倍。不采用3DNow!技术的同档CPU每个时钟周期最多只能执行一次浮点运算。3DNow!指令和MMX指令具有互补性,可混合使用,提升系统的多媒体性能。

3DNow!指令集只支持IEEE 754中单精度数据类型,不能实现双精度浮点运算。

3SSE指令集

IntelPentium III中集成了SSEStreeming SIMD Extension,单指令多数据扩展流)指令集。SSE技术在微处理器中增加了8128位浮点寄存器,支持双精度浮点运算。SSE指令集拓展3DNow!新设计了70条指令,包括8条连续内存数据流优化处理指令、50SIMD浮点运算指令和12条新的多媒体指令。SSE技术极大地满足了三维动画、动态音像、实时通信等流媒体应用的需要。

需求推动技术的发展,互联网的普及使对海量数据流的处理提出了更高的要求,3DNow!之后AMD又推出了增强型3DNow!指令集,IntelPentium 4微处理器中又集成了功能更为强大的SSE2指令集144条)。这些新的SIMD指令集使CPU在进行重复运算时获得了更高的效率。终于,Intel第一款支持超线程Hyper-Threading)技术的Pentium 4主频3.06GHz)在2002114问世,使一个微处理器当作两个甚至多个CPU来使用,在线程级上实现并行操作。之后,双/多核处理器问世,实现了更多线程的并行操作。