2017-05-22 11 views
-3

私はC++とアセンブリを使用してハイライドなプログラムを作成する必要があります。主な機能はC++で書かれています。アセンブリで書かれた関数は、浮動小数点配列要素を追加します。私はintiger番号を使用してそれをすることは問題ありませんでしたが、浮動小数点数を使用すると大きく異なって見えます。ここでアセンブリ。ハイブリッドプログラム。 "除算エラー"と私は何も分割しません

はコードです:

PROC fun 

    push bp 
    mov bp, sp 
    push cx 
    push esi 
    push ebx 

     mov cx, word ptr [bp+12] ; array size 
     mov [bp-8], ecx 
     mov esi, dword ptr [bp+8] ; array 
     mov ebx, 0 


     fld dword ptr [ebx] 
p: 
     fld dword ptr [esi] 
     fadd 
     add esi, byte ptr 8 
     loop p 


     fst dword ptr [eax] 

     pop esi 
     pop cx 
     pop ebx 
     mov sp, bp 
     pop bp 

ret 
ENDP 

問題は、私は私のプログラムの開発を実行する場合、それは「除算エラー」を返し、私はすべての部門を使用していないということです。|誰かが私を助けることができますか?

+1

'mov ebx、0' /' fld dword ptr [ebx] 'あなたは何をすることを期待していましたか? – Michael

+1

あなたのアドレスに16ビットと32ビットのレジスタを混在させるのはなぜですか? (例: '[bp + 12]' vs '[esi]') – Michael

+2

** C++ **コードはありません。 –

答えて

-1

発信者の仕組みを知らずに、これは言うことができません。しかし、あなたの最善の策は、正確な操作を確認しながら、あなたが間違っていた場所を正確に見るために、このコードを一歩進めることであなたの道をデバッグすることです。また、[bp - 8]への参照が私には間違っているように見えます。もしあなたのスタック処理が間違っていれば、破損したスタックを返すことによってゼロで除算することができます。アセンブラがうまくいかないときは、その周りの他のコードからのメッセージはめったに意味がありません。新しいアセンブラを使用して、初期動作を観察して評価するためには、これを期待し、常にシングルステップを実行する必要があります。

+1

これは答えよりもコメントのように聞こえます –

+0

彼はゼロ除算がどこから来るのかを尋ねていました。私は、このようなことを進める方法についてのアドバイスとともに、そのことを説明しました。これは初心者の質問でしたが、私たちはすべてそこにいました。私はそれが正当な正当な答えに値すると思っていました。この男をノックすると、私たちはすべてを減らします。 –

関連する問題