0

私のプログラムでは、スタックにいくつかの値をプッシュしています

for (i=0;i<i2;i++)
    { 
    _asm
       {  
       mov eax,i   // i here is an (int)
       push eax 
       }
    }       

その後、完了したら、次のようにスタックを復元します。

for (i=0;i<i2;i++)
    { 
    _asm
       {  
       pop eax  // eax in not used later
       }
    }       

正常に動作しますが、おそらくサイクルを浪費しています。次のようにスタックを復元しても問題ありませんか。

i=i2*sizeof(int);
_asm
   {  
   add sp,i
   }
4

2 に答える 2

0

それが機能するかどうかは完全にはわかりませんが、最後のものはLEA ESP, [ESP+4*EAX]. 追加の乗算を保存し、条件フラグをそのままにします。

于 2014-06-23T22:10:25.640 に答える
0

算術が正しく行われていれば、それは機能します。私のいつものバグは、そのようなことで1つずつずれていることです。

同様のことを行うには、enterとのleave説明も参照してください。

于 2014-06-23T21:52:31.430 に答える