ymm0
問題文:値がレジスタ内にある位置にあるバイトをレジスタから抽出する必要がありますAL
。
私の方法:(かなり醜い):
; XMM1 を「1 バイト右シフト」マスクに設定します。 ; XMM1 : 000F0E0D0C0B0A090807060504030201 cmp al,15 ; ymm0 以上の下位 xmmword にあるかどうかを確認します ja is_in_higher xor CX,CX 移動CL、AL loop_for_next : vpextrb edx,ymm0,ymm0,0 vpshufb xmm0,xmm0,xmm1 ; xmm0 をマスクとして右シフト ループ loop_for_next .. is_in_higher : vperm2i128 ymm0,ymm0,ymm0,01 ; 上位 128 を下位 128 にスワップします。 jmp loop_for_next
これを行うためのよりエレガントな方法はありますか? アドバイスをいただければ幸いです。課題の核心は、インデックス値として(または) レジスタVPEXTRB
ではなく、即時のインデックス値のみを取ることです。CL
AL
ありがとう...