すべての1をMMXレジスタにロードするにはどうすればよいですか?なぜこれが機能しないのですか?
-
29-09-2019 - |
質問
私が検索したとき、64/32ビットのものに関する意見の質問以外に何も見つけることができなかったようです。
__asm__ {
mov rbx, 0xFFFFffffFFFFffffull
movq mm2, rbx
}
これら2つの命令の後、MM2レジスタは私のXcodeデバッガー(これはC ++のインラインASMです)に従って値0x30500004ffffffffffを保持します。今、私はX86アセンブリを初めて使用しており、アセンブリクラスは永遠に前に撮影したMIPSで教えられていましたが、32ビットモードとRBX(これはPhotoshopプラグインの一部です)(これはPhotoshopプラグインの一部です)(これは機能していないと思います) EBX、BXなどの64ビットバージョンは、おそらく技術的には存在しないでしょう。 0xfffffffffulをMM2にロードして別のレジスタに搭載して乗算するようなすべての1を取得するために他の方法を試しましたが、それもうまくいきませんでした。
SIMDの指示でプラグインを最適化するために修正していますが、それを理解したり、目を傷つけないドキュメントを見つけることができないようです。どんな助けも大歓迎です!
解決
Interjayのコードはあなたが望むことをしていますが、MMXレジスタ(またはXMMレジスタ、そのためにXMMレジスタ)をALL-1に設定する簡単な方法があります(ここでは mm2
):
pcmpeqw mm2, mm2
他のヒント
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
所属していません StackOverflow