(1)MMX | 資料傳輸指令 |
movd | 複制MMX寄存器中的低位雙字到一個通用寄存器或記憶體中,也可以把通用寄存器或記憶體中的資料複制到MMX寄存器的低位雙字中 |
movq | 把一個MMX寄存器的内容複制到另一個MMX寄存器中,這個指令也能被用來把一個記憶體區域中的内容複制到一個MMX寄存器中,或者把MMX寄存器中的内容複制到記憶體中 |
(2)MXX | 算術運算指令 |
paddb paddw | 使用指定的操作數進行組合整型加法 |
paddd paddq | 使用指定的操作數進行組合整型加法 |
paddsb paddsw | 用飽和運算對有符号組合整型進行加法計算 |
paddusb paddusw | 用飽和運算對無符号組合整型進行加法計算 |
psubb psubw | 使用指定的操作數進行組合整型減法,源操作數存放減數,目标操作數存放被減數 |
psubd psubq | 使用指定的操作數進行組合整型減法,源操作數存放減數,目标操作數存放被減數 |
psubsb psubsw | 用飽和運算對有符号組合整型進行減法計算,源操作數存放減數,目标操作數存放被減數 |
psubusb psubusw | 用飽和運算對無符号組合整型進行減法計算,源操作數存放減數,目标操作數存放被減數 |
pmaddwd | 對有符号組合整型進行乘法,然後對結果中相鄰的資料元素進行有符号的整型加法,這個指令可以用來進行整型的點乘運算 |
pmaddubsw | 進行一個組合整型乘法,其中源操作數中存放有符号的位元組,目标操作數中存放無符号的位元組,然後對産生的有符号單字值進行飽和運算相加,最後将結果存放在目标操作數中 |
pmuludq | 将源操作數中的低位雙字與目标操作數的低位雙字相乘,産生的四字結果存放在目标操作數中 |
pmullw | 使用單字進行有符号組合整型乘法,然後将每個雙字的乘積中的低位單字存放在目标操作數中 |
pmulhw | 使用單字進行有符号組合整型乘法,然後将每個雙字的乘積中的高位單字存放在目标操作數中 |
pmulhuw | 使用單字進行無符号組合整型乘法,然後将每個雙字的乘積中的高位單字存放在目标操作數中 |
pmulhrsw | 使用單字值進行無符号組合整型乘法,然後将雙字的乘積舍入到18位,在縮放到16位,最後存放在目标操作數 |
pavgb pavgw | 對指定操作數中無符号整型資料計算組合平均值 |
pmaxub | 對兩組無符号單位元組組合整型資料進行比較,儲存每個比較重較大的單位元組數值 |
pminub | 對兩組無符号單位元組組合整型資料進行比較,儲存每個比較重較小的單位元組數值 |
pmaxsw | 對兩組有符号單位元組組合整型資料進行比較,儲存每個比較重較大的單位元組數值 |
pminsw | 對兩組有符号單位元組組合整型資料進行比較,儲存每個比較重較小的單位元組數值 |
psignb psignw psignd | 根據源操作數中對應資料元素的符号,對目标操作數中的每個有符号整型資料進行取負,取零或儲存不變的操作 |
pabsb pabsw pabsd | 計算每組組合資料元素中的絕對值 |
phaddw phaddd | 對源操作數和目标操作數中的相鄰的資料元素進行整型加法操作 |
phaddsw | 利用飽和運算,對源操作數和目标操作數中相鄰的資料元素進行有符号的整型加法操作,結果存放在目标操作數中 |
phsubw phsubd | 對源操作數和目标操作數中相鄰的資料元素進行整型減法操作 |
phsubsw | 利用飽和運算,對源操作數和目标操作數中相鄰的資料元素進行有符号的整型減法操作,結果存放目标操作數中 |
(3)MMX | 比較指令 |
pcmpeqb pcmpeqw pcmpeqd | 逐個元素比較來個組合整型操作數是否相等,如果源操作數和目标操作數中的資料元素相等,則對應的目标操作數中的資料元素被設定為全1;如果不相等,則目标操作數中的資料元素被設定為全0 |
pcmpgtb pcmpgtw pcmpgtd | 逐個元素比較來個組合整型操作數的大小,如果目标操作數中的資料元素較大,則對應的目标操作數中的資料元素被設定為全1;否則目标操作數中的資料元素被設定為全0 |
packsswb packssdw | 使用有符号的飽和運算,将源操作數和目标操作數中的組合整型單字或雙字轉換為組合整型位元組或單字 |
packuswb | 使用無符号的飽和運算,将源操作數和目标操作數中的組合整型單字轉換為組合整型位元組 |
(4)MMX | 邏輯和位移指令 |
pand | 對指定的源操作數和目标操作數進行按位邏輯與操作 |
pandn | 對指定的源操作數和反轉的目标操作數進行按位的邏輯與操作 |
por | 對指定的源操作數和目标操作數進行按位的邏輯或操作 |
pxor | 對指定的源操作數和目标操作數進行按位的邏輯異或操作 |
psllw pslld psllq | 對目标操作數中的每個元素進行邏輯左移操作,低位用0補進。源操作數中存放需要左移的位數,可以是記憶體位址,MMX寄存器或者是立即數 |
psrlw psrld psrlq | 對目标操作數中的每個元素進行邏輯右移操作,高位用0補進。源操作數中存放需要右移的位數,可以是記憶體位址,MMX寄存器或者是立即數 |
psraw psrad | 對目标操作數中的每個元素進行算術右移操作,高位用符号位補進。源操作數中存放需要右移的位數,可以是記憶體位址,MMX寄存器或者是立即數 |
palignr | 将目标操作數和源操作數組成一個臨時數值,然後按照立即操作數指定的計數對這個臨時數值進行按位元組右移操作。将臨時數值最右邊的四字存入目标操作數 |
(5)MMX | 解租和重排指令 |
punpckhbw punpckhbd punpckhbq | 解租并交織源操作數和目标操作數中的高位資料元素。這些指令可以用于把位元組轉換字,字轉換為雙字以及雙字轉換為四字 |
punpcklbw punpcklbd punpcklbq | 解租并交織源操作數和目标操作數中的低位資料元素。這些指令可以用于把位元組轉換字,字轉換為雙字以及雙字轉換為四字 |
pshufb | 源操作數指定一個控制掩碼,根據這個掩碼對目标操作數中的位元組進行重排操作。這個指令用于對組合操作數的位元組進行重新排列 |
pshufw | 立即操作數指定一個掩碼,根據這個掩碼對目标操作數中的字進行重排操作。這個指令用于對組合操作數的字進行重新排列 |
(6)MMX | 插入和提取指令 |
pinstrw | 複制通用寄存器中的低位單字,将其插入一個MMX寄存器中,插入的位置由立即操作數指定 |
pextrw | 從MMX寄存器中提取一個單字,将其複制到一個通用寄存器的低位單字中,提取的位置由立即操作數指定 |
(7)MMX | 狀态和緩存控制指令 |
emms | 通過重置FPU标簽字來清除MMX的狀态資訊,用以辨別所有的FPU寄存器都已經被清空,這指令在每次從MMX指令到FPU指令轉換之前必須執行 |
movntq | 使用非臨時提示将MMX寄存器中的内容複制到記憶體中 |
maskmovq | 使用非臨時提示有條件地将MMX寄存器中的某些位元組複制到記憶體中,另一個MMX寄存器存放一個掩碼值,用于指定那些位元組需要被複制。EDI寄存器指向目标的記憶體位置 |