算术运算指令
这些指令和普通的算术指令没有什么运算规则上的区别,在一条指令里同时处理几个数据。
PADD[B、W、D] :无符号数加[byte,word,dword]
PADDS[B , W] :有符号数加[byte,word]
PSUB[B、W、D] :无符号数减[byte,word,dword]
PSUBS[B,W] :有符号数减[byte,word]
PMULHW :有符号数乘取高位[word]
PMULLW :有符号数乘取低位[word]。
比较运算指令
PCMPEQ[B,W,D] :串等于比较(byte,word,dword)
PCMPGT[B,W,D] :串大于比较(byte,word,dword)。
转换运算指令
每个指令前都有个“P”开头。这个“P”的意思就是——Packet,就是说每个寄存器里的数据都是个数据包,而不是一个数据。这些指令就是把这些数据打包或拆包用的。
PACKUSWB :有符号数WORD带饱和压缩成无符号BYTE
PACKSS[WB,DW]:有符号数带
饱和压缩成有符号数[word->byte,dword->word]
PUNPCKH[BW,WD,DQ] :交错放置两数的高位[byte->word,word->dword,dword->qword]
PUNPCKL[BW,WD,DQ] :交错放置两数的低位[byte->word,word->dword,dword->qword]。
逻辑运算指令
这些指令和8086汇编里的逻辑指令完全相同(除了PANDN相当于原先的两个操作与和非的结合),只是把寄存器换成64位的而已。
PAND :按位与操作
PANDN :按位与后再取非操作
POR :按位或操作
PXOR :按位或操作。
移位运算指令
为了方便的乘除法运算,但是却没有BYTE为单位的移位运算。
PSLL[W,D,Q]:逻辑左移[word,dword,qword]
PSRL[W,D,Q]:逻辑右移[word,dword,qword]
PSRA[W,D] :算术右移[word,dword,qword]。
数据转移指
MOV[D,Q] :数据传输(dword,qword)。
状态置空指令
状态清除。
(更多详细内容可以阅读参考资料:)