2010-11-29 28 views
0

平均を取得する必要があります。 C++では、配列の長さを渡さないので、 私はそれをどのように分割するのか分かりません。ここでアセンブリで浮動小数値を平均化する

は私が

extern "C" double Average (long [6]); 

     _Average proc 


     finit 
     mov ecx, 6 ; number of elements 
     mov ebx, [esp + 4] ; address of the array 
     fldz 

    L1: 
     fld REAL4 PTR [ebx] ; get elements of array 
     fadd 
     add ebx, 4 

     loop L1 
     fdiv DWORD PTR [esp + 4] 

     fwait 

     ret 

     _Average endp 

答えて

1

が続いて長さを渡すC++で私の値を渡している方法です。または、長さ6の固定サイズの配列なので、それは6と仮定してください。

+0

は私が宣言よりもすることができる他のない – justbrianr

+0

に変更を加えることができ、 C++コードはどこにもありません。どういう意味? – justbrianr

+1

を言うことを意味C++コード –

0

これは、ループカウント(ecx)を使用しているので、プロトタイプ。唯一の選択肢は、長さを持つ別のパラメータを渡すことです(とにかく純粋なC++で行う必要があります)。

あなたはまた、浮動小数点変数ではないので、longを読み込むだけでなく、DWORD PTRREAL4 PTRを変更するfildの代わりfldを使用する必要があります。または、longfloatに変更します。 (これは複数の修飾を必要とするデータタイプのサイズを変更しても別の方法は、doubleからlongを変更している。)

+0

宿題の問題なので、私はC++で何も変更するつもりはないです。 – justbrianr

+0

Zoobaあなたが推奨する変更を行いましたが、私はまだ正しい平均を得ていません。私はfldをfildに変更し、REAL4をDWORDに変更しました。あなたは私のfdivがどのように見えるかを私に見せてもらえますか? fidivの代わりにfdivを使用している場合、fldzを使用する必要があります。 – justbrianr

+0

それはすべて今すぐ動作します。 – justbrianr

関連する問題