天天看點

MMX 指令

MMX 指令集
(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寄存器指向目标的記憶體位置

繼續閱讀