3

検索したところ、64/32ビットに関する意見の質問以外は何も見つからなかったようです。

__asm__ {
  mov rbx, 0xFFFFffffFFFFffffull
  movq mm2, rbx 
}

これらの 2 つの命令の後、私の xcode デバッガー (これは C++ のインライン asm) によると、mm2 レジスターは値 0x30500004ffffffff を保持します。今、私は x86 アセンブリに不慣れで、私のアセンブリ クラスはずっと前に取った MIPS で教えられていましたが、32 ビット モードと rbx ( ebx、bx などの 64 ビット バージョンはありませんか?) おそらく技術的には存在しません。0xffffffffful を mm2 と別のレジスタにロードして乗算するなど、すべて 1 を取得するために他の方法を試しましたが、それもうまくいかないようでした。

いくつかの SIMD 命令を使用してプラグインを最適化するように修正していますが、それを理解できないか、目を痛めないドキュメントを見つけることができないようです。どんな助けでも大歓迎です!

4

2 に答える 2

8

interjay のコードはあなたが望むことを行いますが、MMX レジスタ (または XMM レジスタ) をすべて 1 に設定する簡単な方法があります (ここではmm2):

pcmpeqw mm2, mm2
于 2010-06-26T21:44:45.967 に答える
1

32 ビット プログラムで 64 ビット アセンブリ コードを実行することはできません。メモリの場所から MMX レジスタに値を読み込むか、次のようなものを使用できます。

mov ebx, 0xffffffff
movd mm2, ebx       //copy value to lower 32 bits
punpckldq mm2, mm2  //copy lower 32-bits to upper 32 bits
于 2010-06-24T16:54:18.753 に答える