-1

Visual Studio で 512 ビット (big int) を追加する c++ コードを masm インライン アセンブラーに変換しようとしています。以下のリンクに示されている C++ のように、キャリーは非常に重要です。Visual Studio で c++ を masm インライン アセンブラーに表現する必要があります。

私はmasmでこれをやろうとしましたが、私のmasmコードにはわずか700ミリ秒しかかかりませんでした。

C++ コードはこちら. C++ 加算に 300 ミリ秒かかる

マスムコード


_asm {
         mov edx, summand
         mov eax, [edx]
         mov ebx, this
         add eax, [ebx]
         mov [ebx], eax

mov ecx, 4 mov eax, [edx + ecx] adc eax, [ebx + ecx] mov [ebx + ecx], eax mov ecx, 8 mov eax, [edx + ecx] adc eax, [ebx + ecx] mov [ebx + ecx], eax mov ecx, 12 mov eax, [edx + ecx] adc eax, [ebx + ecx] mov [ebx + ecx], eax }
4

1 に答える 1

1

使った方が早いかも

 mov eax, [edx + 4]
 adc eax, [ebx + 4]
 mov [ebx + 4], eax

それ以外の

 mov ecx, 4
 mov eax, [edx + ecx]
 adc eax, [ebx + ecx]
 mov [ebx + ecx], eax

8 と 12 についても同じです。ただし、リンクの C++ コードよりも asm コードが本当に遅い場合は驚くでしょう。asm ブロックを使用すると、関数の別の部分で一部の最適化が無効になる場合があります。それを見つけるには、関数全体の生成されたアセンブラー コードを調べる必要があります。(そして、あなたの700ミリ秒は何ですか?)

于 2013-03-30T09:29:35.337 に答える