跳到內容

vpcmpeqb & vpcmpmskb

這個指令名稱意思是

  • v是avx系列前綴
  • Packed在前面是整數指令
  • cmp比較,eq是equal相等的,還有GT(Greater Than)選項
  • b表示byte
vpcmpeqb ymm0, ymm0, ymm1

具體作用是將ymm0和ymm1逐byte比較,相等的byte是FF,不相等是00,最後將結果存入ymm0

這裡的msk指的是mask,取ymm0的每個byte的最高位變成32 bits的內容存入edx

vpmovmskb edx, ymm0

比如ymm0以32個bytes來看,原本是[10001000, 01001000, 10001100, …]
這裡就是取了1 0 1最高位,將這些拼成32位給edx暫存器
這個指令dst也支援reg64,但對32位暫存器寫入動作會觸發高32位清零結果是相同的

把vpcmpeqb和vpmovskb結合起來的話,比對ymm0和ymm1是否相同,相同的FF,不相同的00
經過vpmovskb就會得到相同是1,不同是0的遮罩了
也可以 test edx, edx 判斷是否存在相同的
下一篇將介紹實際應用