MMX指令集(詳解)

2021-04-14 02:46:22 字數 4494 閱讀 4820

emms

mmx狀態置空:

將fp特徵字置空(全1),使後續浮點指令可以使用浮點暫存器,其他mmx指令自動置fp為全0.本指令應在所有mmx例程結束和呼叫可含有fp指令的例程時使用,以清除mmx狀態.

movd mm,r/m32

movd r/m32,mm

轉移32位資料:

將32位資料從整型暫存器/記憶體移到mmx暫存器,和反向移動.movd不能在mmx暫存器之間,記憶體之間及整型暫存器之間移動資料.目標運算元為mmx暫存器時,32位源運算元寫入目標暫存器的低32位.目標暫存器"0擴充套件"為64位.源運算元為mmx暫存器時,該暫存器的低32位被寫入目標運算元.

movq mm,r/m64

movq r.m64,mm

轉移64位資料:

將64位資料從整型暫存器/記憶體移到mmx暫存器,和反向移動.目標運算元和源運算元可為mmx暫存器,64位記憶體運算元.但movq不能在記憶體和記憶體之間進行資料轉移.

packsswb mm,mm/m64

packssdw mm,mm/m64

有符號飽和方式資料成組:

將mmx暫存器和mmx暫存器/記憶體單元中的有符號字組變成mmx暫存器的有符號位元組組.和將mmx暫存器和mmx暫存器/記憶體單元中的有符號雙字組變成mmx暫存器的有符號字組.

(注1)

packuswb mm,mm/m64

無符號飽和方式資料成組

將mmx暫存器和mmx暫存器/記憶體單元中的有符號字組變成mmx暫存器的無符號位元組組.(注1)

paddb mm,mm/m64

paddw mm,mm/m64

paddd mm,mm/m64

環繞方式資料組相加:

按環繞方式

將mmx暫存器/記憶體單元中的位元組組(字組,雙字組)相加到mmx暫存器中

(注1)

paddsb mm,mm/m64

paddsw mm,mm/m64

飽和方式有符號

資料組相加:

按飽和方式將mmx暫存器/記憶體單元中的有符號位元組組(字組)相加到mmx暫存器中的有符號位元組組(字組)資料.(注1)

paddusb mm,mm/m64

paddusw mm,mm/m64

飽和方式無符號

資料組相加:

按飽和方式將mmx暫存器/記憶體單元中的無符號位元組組(字組)相加到mmx暫存器中的無符號位元組組(字組)資料.(注1)

pand mm,mm/m64

逐位邏輯與:

將mmx暫存器/記憶體單元中的64位資料進行與操作,結果存於mmx暫存器中.

pandn mm,mm/m64

逐位邏輯與非:

將mmx暫存器中的64位值取反,再將取反後的mmx暫存器與mmx暫存器/記憶體單元中的64位資料進行與操作,結果存於mmx暫存器中.

pcmpeqb mm,mm/m64

pcmpeqw mm,mm/m64

pcmpeqd mm,mm/m64

成組資料的相等比較:

將mmx暫存器與mmx暫存器/記憶體單元中的位元組組(字組,雙字組)資料進行相等比較.

該指令將目標運算元和源運算元的相應資料元素進行比較,相等則目標暫存器的對應資料元素被置為全1,否則置為全0.

eg:pcmpeqe mm,mm/m64mm?

?00000000000000111

0111000111000111

mm/m64??

11111110000001100

0111000111000111

結果mm??

00000000000000000

1111111111111111

pcmpgtb mm,mm/m64

pcmpgtw mm,mm/m64

pcmpgtd mm,mm/m64

成組資料的相等比較:

將mmx暫存器與mmx暫存器/記憶體單元中的位元組組(字組,雙字組)資料進行大於比較.

該指令將目標運算元和源運算元的相應資料元素進行比較,大於則目標暫存器的對應資料元素被置為全1,否則置為全0.(參考上一條)

pmaddwd mm,mm/m64

資料組(字組)的乘加:

將mmx暫存器與mmx暫存器/記憶體單元中的字組資料相乘,然後將32位結果逐對相加並作為雙字存於mmx暫存器中.

eg:pmaddwd mm,mm/m64mm?

?0111000111000111

0111000111000111操作*

***mm,mm/m64??

1000000000000000

0000010000000000

操作/_____+____/

/______+_____/mm?

?1100100011100011

1001110000000000

pmulhw mm,mm/m64

成組資料(字組)的乘後取高位:

將mmx暫存器與mmx暫存器/記憶體單元中的有符號字組資料相乘,然後將結果的高16位存入mmx暫存器.

eg:pmulhw mm,mm/m64mm?

?0111000111000111

0111000111000111操作*

***mm/m64??

1000000000000000

0000010000000000

操作high order

high order

high order

high ordermm?

?1100011100011100

0000000111000111

pmullw mm,mm/m64

成組資料(字組)的乘後取低位:

將mmx暫存器與mmx暫存器/記憶體單元中的有符號字組資料相乘,然後將結果的低16位存入mmx暫存器.(參考上一條)

pormm,mm/m64

逐位邏輯或:

將mmx暫存器/記憶體單元中的64位資料進行或操作,結果存於mmx暫存器中.

psllw mm,mm/m64

pslld mm,mm/m64

psllq mm,mm/m64

psllw mm,imm8

pslld mm,imm8

psllq mm,imm8

成組資料的邏輯左移:

將mmx暫存器中的字(雙字,四字)資料按mmx暫存器/記憶體單元指定的個數左移,低位移入0.

將mmx暫存器中的字(雙字,四字)資料按8位立即數指定的個數左移,低位移入0.

psraw mm,mm/m64

psrad mm,mm/m64

psraw mm,imm8

psrad mm,imm8

成組資料的算術右移:

將mmx暫存器中的字(雙字)資料按mmx暫存器/記憶體單元指定的個數右移,移動中保持符號位.

將mmx暫存器中的字(雙字)資料按8位立即數指定的個數右移,移動中保持符號位.

psrlw mm,mm/m64

psrld mm,mm/m64

psrlq mm,mm/m64

psrlw mm,imm8

psrld mm,imm8

psrlq mm,imm8

成組資料的邏輯右移:

將mmx暫存器中的字(雙字)資料按mmx暫存器/記憶體單元指定的個數右移,移出位用0填充.

將mmx暫存器中的字(雙字)資料按8位立即數指定的個數右移,移出位用0填充.

psubb mm,mm/m64

psubw mm,mm/m64

psubd mm,mm/m64

環繞方式成組資料相減

:從mmx暫存器中按位元組(字,雙字)減去mmx暫存器/記憶體單元中的位元組(字,雙字)組.(注1)

psubsb mm,mm/m64

psubsw mm,mm/m64

飽和方式有符號

成組資料相減:

從mmx暫存器中的有符號成組位元組(字)組資料減去mmx暫存器/記憶體單元中的有符號位元組(字)組資料.(注1)

psubusb mm,mm/m64

psubusw mm,mm/m64

飽和方式有符號

成組資料相減:

從mmx暫存器中的無符號成組位元組(字)組資料減去mmx暫存器/記憶體單元中的無符號位元組(字)組資料.(注1)

punpckhbw mm,mm/m64

punpckhwd mm,mm/m64

punpckhdq mm,mm/m64

高位成組資料分解:

此指令交替取出源運算元和目標運算元的資料元素的高半部分,寫入目標運算元中,資料元素的低半部分被忽略.

eg:punpckhbw mm,mm/m64

punpcklbw mm,mm/m64

punpcklwd mm,mm/m64

punpckldq mm,mm/m64

低位成組資料分解:

此指令交替取出源運算元和目標運算元的資料元素的低半部分,寫入目標運算元中,資料元素的高半部分被忽略.(參考上一條)

pxor mm,mm/m64

逐位邏輯異或:

將mmx暫存器/記憶體單元中的64位資料進行異或操作,結果存於mmx暫存器中.

基於MMX指令集的程式設計簡介

基於mmx指令集的程式設計簡介 出處 http www.codeproject.com cpp mmxintro.asp mmx技術簡介 intel 公司的mmx 多 增強指令集 技術可以大大提高應用程式對二維三維圖形和圖象的處理能力。intel mmx技術可用於對大量資料和複雜陣列進行的複雜處理,...

基於MMX指令集的程式設計簡介

mmx技術簡介 intel 公司的mmx 多 增強指令集 技術可以大大提高應用程式對二維三維圖形和圖象的處理能力。intel mmx技術可用於對大量資料和複雜陣列進行的複雜處理,使用mmx技術可處理的資料基本單位可以是位元組 byte 字 word 或者是雙字 double word visual ...

ZT 基於MMX指令集的程式設計簡介

基於mmx指令集的程式設計簡介 mmx技術簡介 intel 公司的mmx 多 增強指令集 技術可以大大提高應用程式對二維三維圖形和圖象的處理能力。intel mmx技術可用於對大量資料和複雜陣列進行的複雜處理,使用mmx技術可處理的資料基本單位可以是位元組 byte 字 word 或者是雙字 dou...