使用MMXSSE匯編指令集優(yōu)化視頻開發(fā)_第1頁
使用MMXSSE匯編指令集優(yōu)化視頻開發(fā)_第2頁
使用MMXSSE匯編指令集優(yōu)化視頻開發(fā)_第3頁
使用MMXSSE匯編指令集優(yōu)化視頻開發(fā)_第4頁
使用MMXSSE匯編指令集優(yōu)化視頻開發(fā)_第5頁
已閱讀5頁,還剩5頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

1、1、匯編指令集目前大部分的PC機(jī)采用的都是Intel或者AMD的CPU,其支持的多媒體匯編指令有:1. MMX:多媒體擴(kuò)展指令(MultiMedia eXtention),該指令由Intel在1996年為Pentium處理器開發(fā),包括了57條多媒體指令,可以i一次處理多個(gè)數(shù)據(jù)。但是MMX指令不能與X86浮點(diǎn)運(yùn)算指令同時(shí)執(zhí)行,在某些場合使用受到一定限制。2. SSE:SIMD擴(kuò)展指令集(Streaming SIMD Extension),也稱作單指令多數(shù)據(jù)流擴(kuò)展。其中的SIMD的含義為Single Instruction Multiple Data(單指令多數(shù)據(jù))。該指令集有Intel為Pent

2、ium III研發(fā),是為了提高處理浮點(diǎn)運(yùn)算性能而開發(fā)的指令集,有70條指令,包括50條SIMD浮點(diǎn)運(yùn)算指令用于提升3D圖形運(yùn)算效率、12條MMX整數(shù)運(yùn)算增強(qiáng)指令和8條優(yōu)化內(nèi)存中連續(xù)數(shù)據(jù)塊傳輸指令。這些指令有利于優(yōu)化圖像處理、浮點(diǎn)運(yùn)算、3D運(yùn)算和多媒體處理等運(yùn)算的性能。3. 3DNow!:3DNow!指令集由AMD開發(fā),有21條擴(kuò)展指令。3DNow!指令集主要針對(duì)三維建模、坐標(biāo)變換和效果渲染等3D數(shù)據(jù)處理。4. SSE2:SSE2指令集是比SSE更加先進(jìn)的指令集,共包含144條指令,由兩個(gè)部分組成:SSE主要負(fù)責(zé)處理浮點(diǎn)數(shù),MMX主要負(fù)責(zé)處理整數(shù)計(jì)算。SSE2的寄存器容量是MMX的兩倍,寄存器存

3、儲(chǔ)的數(shù)據(jù)也是MMX的兩倍。SSE2可以向下兼容MMX,經(jīng)由MMX進(jìn)行優(yōu)化的程序可以繼續(xù)由SSE2進(jìn)行進(jìn)一步的優(yōu)化。5. SSE3:SSE3是在SSE2的基礎(chǔ)上開發(fā)的,相比SSE2增加了13個(gè)SIMD指令,主要目的在于改進(jìn)線進(jìn)程同步和媒體、游戲等特殊應(yīng)用程序領(lǐng)域。其中定義了超線程性能增強(qiáng)作為其中的一部分,可以提升處理器的超線程處理能力,使得處理器更快地進(jìn)行并行數(shù)據(jù)處理。6. SSE4:SSE4是Intel自SSE2以來最大的改進(jìn),包括了從多媒體應(yīng)用到高性能計(jì)算領(lǐng)域的應(yīng)用,以及使用一些專用電路進(jìn)行特定應(yīng)用的加速。SSE4增加了47條指令,改進(jìn)了整數(shù)型和浮點(diǎn)型計(jì)算、支持DWORD和QWORD操作、新

4、的單精度FP操作、快速寄存器操作和面向寄存器的內(nèi)存操作等。2、MMX/SSE2指令集剖析2.1、媒體擴(kuò)展指令MMXIntel的MMX指令是Intel IA系列指令的擴(kuò)展,使用了單指令多數(shù)據(jù)技術(shù)(SIMD),以并行方式處理多個(gè)數(shù)據(jù)元素。MMX擴(kuò)展指令集新增了57條指令和一種64位的4字?jǐn)?shù)據(jù),作為成組的數(shù)據(jù)可供MMX指令操作。一個(gè)64位數(shù)據(jù)類型可以包含8個(gè)字節(jié)、4個(gè)字、兩個(gè)雙字或者一個(gè)4重字類型,這樣一條MMX指令即可以同時(shí)處理2/4/8個(gè)數(shù)據(jù)單元。為了適應(yīng)這樣的數(shù)據(jù),MMX增加了8個(gè)64位寄存器(MM0MM7),僅有MMX指令可以按寄存器名稱直接訪問。MMX針對(duì)832位數(shù)據(jù)元素的處理性能進(jìn)行了改

5、善,一個(gè)MMX指令可以處理8個(gè)字節(jié),一個(gè)時(shí)鐘周期內(nèi)完成兩條指令,即一個(gè)時(shí)鐘周期可以處理16個(gè)字節(jié)。此外,MMX技術(shù)為其他功能釋放了額外的處理器周期,更小的處理器占用率可以實(shí)現(xiàn)更高程度的并發(fā)。一、MMX指令集簡介:MMX指令集從功能上可以分為8類:數(shù)據(jù)傳送指令、算術(shù)運(yùn)算指令、比較運(yùn)算指令、類型轉(zhuǎn)換指令、擴(kuò)展壓縮數(shù)據(jù)指令、邏輯運(yùn)算指令、移位運(yùn)算指令、狀態(tài)清除指令。指令列表如下:在以上指令中,除了EMMS指令外,都涉及兩個(gè)操作數(shù),即源操作數(shù)和目標(biāo)操作數(shù),指令中源操作數(shù)在右,目標(biāo)操作數(shù)在左。目標(biāo)操作數(shù)可作為第二個(gè)源操作數(shù)進(jìn)行操作,指令結(jié)束后被運(yùn)算結(jié)果所覆蓋1)、數(shù)據(jù)轉(zhuǎn)移指令:數(shù)據(jù)轉(zhuǎn)移指令實(shí)現(xiàn)MMX寄存

6、器同內(nèi)存單元之間,以及MMX寄存器同通用寄存器之間的雙向數(shù)據(jù)傳遞功能。MOVD:轉(zhuǎn)移32位(4字節(jié))數(shù)據(jù);MOVQ:轉(zhuǎn)移64位(8字節(jié))數(shù)據(jù)。2)、算數(shù)運(yùn)算指令:算數(shù)運(yùn)算指令對(duì)打包的數(shù)據(jù)類型實(shí)現(xiàn)加法、減法、乘法和乘加操作。在介紹算術(shù)運(yùn)算指令前,先簡要介紹一下所謂的“環(huán)繞模式”和“飽和模式”。所謂環(huán)繞模式,就是當(dāng)一個(gè)數(shù)據(jù)單元的數(shù)據(jù)達(dá)到最大值(比如一個(gè)字節(jié)的值為255)時(shí),如果繼續(xù)對(duì)其加1,那么該字節(jié)的數(shù)據(jù)將變?yōu)?,進(jìn)位將被忽略。飽和模式則對(duì)數(shù)據(jù)的溢出進(jìn)行了限制,根據(jù)有符號(hào)或者無符號(hào)類型,將運(yùn)算后的結(jié)果限制在數(shù)據(jù)類型規(guī)定的范圍以內(nèi)。· PADDB/PADDW/PADDD和PSUBB/PS

7、UBW/PSUBD指令分別在環(huán)繞模式下對(duì)源和目標(biāo)操作數(shù)進(jìn)行有符號(hào)或無符號(hào)的相加和相減操作。每一組的三個(gè)指令分別對(duì)應(yīng)字節(jié)型、字形和雙字型數(shù)據(jù)。· PADDSB/PADDSW和PSUBSB/PSUBSW指令分別在有符號(hào)飽和模式下進(jìn)行相加和相減操作。兩個(gè)指令分別處理字節(jié)型和字型數(shù)據(jù)。· PADDUSB/PADDUSW和PSUBUSB/PSUBUSW指令分別在無符號(hào)飽和模式下進(jìn)行相加和相減操作。兩個(gè)指令分別處理字節(jié)型和字型數(shù)據(jù)。· PMULHW和PMULLW指令執(zhí)行源和目標(biāo)操作數(shù)的乘法操作,并分別將乘積的高字和低字保存到目標(biāo)操作數(shù)中。· PMADDWD指令計(jì)算源

8、和目標(biāo)操作數(shù)有符號(hào)部分的乘積,并將產(chǎn)生的4個(gè)32位雙字的中間結(jié)果成對(duì)相加,獲得兩個(gè)32位雙字。PMADDWD的計(jì)算結(jié)果如圖示顯示:3).比較指令:PCMPEQB/PCMPEQW/PCMPEQD和PCMPGTB/PCMPGTW/PCMPGTD指令按照有符號(hào)類型數(shù)據(jù)比較源和目標(biāo)操作數(shù)進(jìn)行相等比較或大于比較。對(duì)于相等比較,如果一對(duì)數(shù)據(jù)元素相等,則目標(biāo)操作數(shù)中的相應(yīng)數(shù)據(jù)元素設(shè)置為全 1;否則設(shè)置為全 0。對(duì)于大于比較,如果目標(biāo)操作數(shù)中的數(shù)據(jù)元素大于源操作數(shù)中相應(yīng)的數(shù)據(jù)元素,則目標(biāo)操作數(shù)中的相應(yīng)數(shù)據(jù)元素設(shè)置為全 1;否則設(shè)置為全 0。4).類型轉(zhuǎn)換指令:PACKSSWB指令將有符號(hào)字轉(zhuǎn)換成為有符號(hào)的字節(jié)

9、;PACKSSDW將有符號(hào)的雙字轉(zhuǎn)換成為有符號(hào)的字;轉(zhuǎn)換過程都按照有符號(hào)飽和模式進(jìn)行。PACKUSWB指令將有符號(hào)的字轉(zhuǎn)換為無符號(hào)的字節(jié),轉(zhuǎn)換過程按照無符號(hào)飽和模式進(jìn)行。5).擴(kuò)展壓縮數(shù)據(jù)指令:PUNPCKHBW/PUNPCKHWD/PUNPCKHDQ指令和PUNPCKLBW/PUNPCKLWD/PUNPCKLDQ分別將源于目標(biāo)操作數(shù)的高位數(shù)據(jù)和低位數(shù)據(jù)取出并交錯(cuò)排入目標(biāo)操作數(shù)中。PUNPCKHBW和PUNPCKLBW的示意圖如下:PUNPCKHBW操作示意圖PUNPCKLBW操作示意圖6).邏輯運(yùn)算指令:PAND邏輯按位與;PANDN邏輯按位與非;POR邏輯按位或;PXOR邏輯按位或非;7)

10、.位移指令:位移指令有邏輯左移、邏輯右移和算數(shù)右移三種。PSLLW/PSLLD/PSLLQ和PSRLW/PSRLD/PSRLQ實(shí)現(xiàn)邏輯左移和右移操作,并用0填充空出來的高位或低位。支持字型、雙字型和四字型數(shù)據(jù);PSRAW/PSRAD實(shí)現(xiàn)算數(shù)右移操作,并將符號(hào)位拷貝到右移所空出的比特位上。8).狀態(tài)清除指令:EMMS指令用于將MMX狀態(tài)清空。該指令在一個(gè)MMX程序結(jié)束時(shí)執(zhí)行。二、CPU寄存器除了8個(gè)MMX寄存器之外,CPU還有自己的通用寄存器EAX/EBX/ECX/EDX。這四個(gè)通用寄存器都是32位寄存器,可以直接訪問,還可以按照16位和8位進(jìn)行訪問。如EAX可以使用AX獲得低16位,AX可以使

11、用AH和AL分別獲取高8位和低8位。其余的寄存器有ESI/EDI/ESP/EBP等。功能描述見下圖:三、地址加載指令1).LEA指令LEA指令將源操作數(shù)的偏移地址傳遞給通用寄存器。如以下代碼:plain view plain copy print?1. LEA BX, 2400H LEA BX, 2400H該指令將2400H的偏移地址2400傳送給BX,執(zhí)行后BX=2400H。2).LDS指令LDS指令將4字節(jié)源內(nèi)存的數(shù)據(jù)按照段地址和偏移地址傳送給鏈各個(gè)寄存器,其中低地址的2字節(jié)作為偏移地址送給作為目標(biāo)操作數(shù)的寄存器,高地址的2字節(jié)作為段地址送到DS寄存器。如以下代碼:plain view p

12、lain copy print?1. LDS DI, 2130H LDS DI, 2130H該指令將低地址2130H、2131H的數(shù)據(jù)作為偏移地址送到DI中,2132H、2133H的數(shù)據(jù)作為段地址送到DS中。2.2、MMX程序設(shè)計(jì)使用MMX編程的方法主要有三種:· 直接編寫匯編程序文件,命名為*.asm;· 使用C+嵌入?yún)R編,在C+代碼中使用_asm.編寫匯編程序;· 使用64位數(shù)據(jù)類型_m64和與MMX相關(guān)的C+函數(shù)實(shí)現(xiàn)。2.3、SSE/SSE2媒體擴(kuò)展指令集SSE和SSE2是基于MMX的新的匯編指令集,將寄存器的大小從64位擴(kuò)展到128位,且增加了新的媒體處理

13、匯編指令。一、SSE/SSE2數(shù)據(jù)結(jié)構(gòu)SSE技術(shù)支持打包的單精度浮點(diǎn)數(shù)操作(Packed Single-Precision Floating-point),將4個(gè)獨(dú)立的32位單精度浮點(diǎn)數(shù)打包為一個(gè)128位數(shù)據(jù)。SSE提供了8個(gè)128位SIMD寄存器XMM0XMM7,可以直接存取,但只能存放數(shù)據(jù)而不能用于尋址。此外SSE還提供了新的控制/狀態(tài)寄存器MXCSR。SSE2指令包括原油的32位通用寄存器(EAXEDX)、64位MMX寄存器(MM0MM7)、128位XMM(XMM0XMM7)和32位標(biāo)識(shí)寄存器EFLAGS及浮點(diǎn)狀態(tài)/控制寄存器MCSR。此外還有兩種數(shù)據(jù)類型:128位的打包雙精度浮點(diǎn)數(shù)和4

14、種128位SIMD整數(shù)。· 128位打包雙精度浮點(diǎn)數(shù):兩個(gè)64位雙精度浮點(diǎn)數(shù)打包成一個(gè)雙4字節(jié)數(shù)據(jù);· 128位打包整數(shù):可以包含16個(gè)字節(jié)、8個(gè)字、4個(gè)雙字或2個(gè)四重字的整數(shù);二、SSE/SSE/2指令SSE指令集包含70條指令,主要可以分為三組:1. 50條SIMD浮點(diǎn)運(yùn)算指令:50條SIMD浮點(diǎn)運(yùn)算指令是其主要部分,包括幾個(gè)部分:數(shù)據(jù)傳送指令、算數(shù)運(yùn)算指令、比較指令、類型轉(zhuǎn)換指令、組合指令、狀態(tài)管理指令。2. 12條SIMD整數(shù)指令:為了增強(qiáng)MMX指令系統(tǒng)而新增。3. 8條高速緩沖存儲(chǔ)器優(yōu)化指令:8條指令,為更好滴控制緩存操作,提供啊程序運(yùn)行性能,專門針對(duì)Pentium III設(shè)計(jì)。

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論