MMX 命令一覧

●凡例

regMMX レジスタ (MM0 ~ MM7)
std-reg通常のレジスタ (EAX, EBX, ECX, EDX, ESP, EBP, ESI, EDI)
memメモリ オペランド (タイプは無視される)
imm88 ビット イミディエイト オペランド
N/Aパック方式を示す末尾文字を付けない
OP1第 1 オペランド
OP2第 2 オペランド



●「飽和」の意味

MMX 演算では、演算結果がオーバーフローしたとき、通常のようにラップアラウンドする代わりに、最大値または最小値を得ることもできます。たとえば、WORD データ 0FFF0h に 12h を加算した場合、通常はラップアラウンドして 0002h が結果になりますが、符号なし飽和演算の結果は 0FFFFh になります。



●下の表の「パック」列の意味

下の表で、「パック」列に B、W、D、または Q が記述されている命令は、そのいずれかの文字を命令名の末尾に付けて記述します。たとえば、算術演算 PADD については、「パック」列に「BWD」と書かれています。したがって、この命令は、実際には PADDB、PADDW、または PADDD と記述します。末尾の B は、演算対象の 8 バイト データを 8 つの 1 バイト データと見なすことを意味します。W、D、Q は、それぞれデータを 4 つの 2 バイト データ、2 つの 4 バイト データ、および 1 つの 8 バイト データと見なすことを意味します。パック列に「N/A」とある命令は、末尾に文字を付けないで記述します。



●命令一覧

命令オペランドパック意味

転送
MOVDreg, std-regN/ADWORD (4 バイト) データの転送
std-reg, regMMX レジスタに転送する場合、
reg, mem上位 4 バイトには 0 が入る
mem, reg(ゼロ拡張)
MOVQreg, reg2N/AQWORD (8 バイト) データの転送
reg, mem
mem, reg

パック (より狭いデータに変換)
PACKSSDWreg, reg2N/ADWORD を WORD にパック (※1)
reg, mem(符号付き飽和演算)
PACKSSWBreg, reg2N/AWORD を BYTE にパック (※2)
reg, mem(符号付き飽和演算)
PACKUSWBreg, reg2N/AWORD を BYTE にパック (※2)
reg, mem(符号なし飽和演算)

アンパック (より広いデータに変換)
PUNPCKLreg, reg2※3下位データへアンパック
reg, mem
PUNPCKHreg, reg2※3上位データへアンパック
reg, mem

算術演算
PADDreg, reg2BWD加算 (ラップアラウンド)
reg, mem
PADDSreg, reg2BW加算 (符号付き飽和演算)
reg, mem
PADDUSreg, reg2BW加算 (符号なし飽和演算)
reg, mem
PSUBreg, reg2BWD減算 (ラップアラウンド)
reg, mem
PSUBSreg, reg2BW減算 (符号付き飽和演算)
reg, mem
PSUBUSreg, reg2BW減算 (符号なし飽和演算)
reg, mem
PMULLreg, reg2W乗算 (結果の下位ワードを得る)
reg, mem
PMULHreg, reg2W乗算 (結果の上位ワードを得る)
reg, mem
PMADDreg, reg2N/A乗算して加算 (※4)
reg, mem

論理演算
PANDreg, reg2Qビットごとの論理積
reg, mem
PORreg, reg2Qビットごとの論理和
reg, mem
PXORreg, reg2Qビットごとの排他的論理積
reg, mem
PANDNreg, reg2QOP1 を否定してから OP2 と
reg, memビットごとの論理積を取る

比較
PCMPEQreg, reg2BWD同じかどうか比較
reg, mem
PCMPGTreg, reg2BWDより大きいかどうか比較
reg, mem

シフト
PSLLreg, reg2WDQOP1 を OP2 だけ左シフト
reg, mem
reg, imm8
PSRLreg, reg2WDQOP1 を OP2 だけ右シフト
reg, mem
reg, imm8
PSRAreg, reg2WDOP1 を OP2 だけ算術右シフト
reg, mem(最上位ビットを維持)
reg, imm8

その他
EMMSMMX 状態のクリア (※5)



※1PACKSSDW は、OP1 の 2 つの DWORD と OP2 の 2 つの DWORD をそれぞれ WORD に圧縮し、飽和させます。結果の 4 つの WORD 値が OP1 に格納されます。

※2PACKSSWB および PACKUSWB は、OP1 の 4 つの WORD と OP2 の 4 つの WORD をそれぞれ BYTE に圧縮し、飽和させます。結果の 8 つの BYTE 値が OP1 に格納されます。

※3PUNPCKL および PUNPCKH の命令末尾には、BW、WD、DQ のいずれかを指定します。

※4PMADD は、OP1 の WORD[0] と OP2 の WORD[0] を掛けた結果の DWORD 値と、OP1 の WORD[1] と OP2 の WORD[1] を掛けた結果の DWORD 値を加算し、OP1 の DWORD[0] に格納します。また、WORD[2] と WORD[3] の同様の演算結果を DWORD[1] に格納します。
(ここで、WORD[0] = 最下位ワード、WORD[1] = 2 番目のワード、など)

※5MMX 命令群を実行した後に EMMS 命令を実行すると、MMX 状態がクリアされ、以降で浮動小数点命令を使用できるようになります。MMX 命令と浮動小数点命令との関連性については、ほかのドキュメントを参照してください。

参照 MMX命令.MMX

[目次]