1

私は何かに取り組んでいて、別の問題に遭遇しました。最初に:

ROR64 macro a, rot
; Result := (A shl (64-rot)) xor (A shr rot);
  MOV     EAX, 64
  SUB     EAX, rot
  PSLLQ   a, EAX
  MOVQ    mm6, a
  PSRLQ   mm6, rot
  PXOR    a, mm6
endm

私は最後の質問に従って QWords を使用してプロセスを試みてきました (おそらく DWords でも学習してみます)。私が使用している開発マシンでアクセスできるのは MMX 命令だけなので、そこに行ってきました。MMX ops は、MASM32 から取得したエラーを介してこれらのレジスタでのみ機能すると判断したため、問題は「腐敗」から来る値の処理にありました。しかし、「rot」と「64-rot」を MMX レジスタに入れようとすると、さらにエラーが発生します。これを解決するにはどうすればよいですか?

また、MMX レジスタを QWord として追加する必要があります。参考文献にこれを行うための指示がありません。とにかく、それらを通常のレジスタに分割するか、FP 命令でプッシュする必要がありますか?

4

1 に答える 1

3

MMXは SIMD プログラミング用です (一般に 64 ビット操作用ではありません)。

ウィキペディアを参照してください .. 「MMX命令セットの主な使用法は、パックされたデータ型の概念に基づいています。つまり、単一の64ビット整数、2つの32ビット整数、4つの16ビット整数にレジスタ全体を使用する代わりに、整数、または 8 つの 8 ビット整数を同時に処理できます。」

現在では、SSEx テクノロジーのために廃止されています。申し訳ありませんが、仕様には PADDQ (PADDx を見てください) のような命令はありませ

シフト命令は、シフト量を保持するために 8 ビットの変位または他の MMX レジスタのみを受け入れます。eaxこれは、レジスターを使用してジョブを実行できないことを意味します。良い試みですが、願い事が現実世界とは何の関係もないこともあります。

ところで、投稿したマクロをよく見てください。どう考えても正しくないと思います。実行したい操作の順序と期待する結果について考えてください。

いつでもコードを発行するマクロを使用しているため、試すことができます(テストされていません):

TEST macro a, rot
; Result := (A shl (64-rot)) xor (A shr rot);
  MOVQ    mm6, a
  PSLLQ   a, 64-rot
  PSRLQ   mm6, rot
  PXOR    a, mm6
endm
于 2012-10-24T05:20:30.837 に答える