2016-10-28 8 views
1

私はx86アセンブリプログラムを作成しています。何らかの理由で私のループが詰まっています。なぜ誰かがjeステートメントが実行されていない理由を理解するのを手助けできるかどうか疑問に思っていましたか? 2番目のループの中に出力を置くと、クラッシュするまで出力されます。どうしてジーの比較がうまくいきませんか?x86アセンブリプログラムがループでスタックされました

;; compute_bs MACROを無視し、それは私の問題に関連してはいけません;;

おかげ

interpolate_proc PROC \t NEAR32 
 
\t push ebp 
 
\t mov ebp, esp 
 
\t fldz 
 
\t mov cx, degree 
 
\t 
 
\t START_LOOP: 
 
\t \t mov eax, 0 
 
\t \t cmp cx, 0 
 
\t \t je END_LOOP 
 
\t \t mov dx,0 
 

 
\t \t fld1 
 
\t \t SECOND_LOOP: 
 
\t \t \t cmp dx, cx ;<-- Not executing. even though inc dx 
 
\t \t \t je SECOND_END 
 

 
\t \t \t mov ebx, array 
 
\t \t \t fld REAL4 PTR x 
 
\t \t \t mov ax, 8 
 
\t \t \t mul dx 
 
\t \t \t add ebx, eax 
 
\t \t \t fld REAL4 PTR [ebx] 
 
\t \t \t fsubr 
 
\t \t \t fmul 
 
\t \t \t inc dx 
 
\t \t \t jmp SECOND_LOOP 
 
\t \t \t 
 
\t \t SECOND_END: 
 
\t \t \t output prompt 
 
\t \t \t mov ebx, array 
 
\t \t \t compute_bs ebx, cx 
 
\t \t \t mov temp, eax 
 
\t \t \t fld REAL4 PTR temp 
 
\t \t \t fmul 
 
\t \t \t fadd 
 
\t \t \t 
 
\t \t dec cx 
 
\t \t jmp START_LOOP \t 
 
\t \t 
 
\t END_LOOP: 
 
\t 
 
\t compute_bs ebx, cx 
 
\t mov temp, eax 
 
\t fld REAL4 PTR temp 
 
\t fadd 
 
\t fstp REAL4 PTR temp 
 
\t mov eax, temp 
 
\t mov esp, ebp 
 
\t pop ebp 
 
interpolate_proc ENDP 
 
END

+0

オースティン、答えが有用であった場合、あなたはそれを受け入れるために、チェックマークをクリックしてください。 –

+0

デバッガでコードを実行する方法を学ぶ必要があります。この種の問題を自分ですばやく見つけることができます。 –

+0

あなたは何をお勧めしますか?私は、Windows 10 –

答えて

3

命令

mul dx 

dxaxを乗算し、dxであなたのオペランドを上書きし、dx:axに32ビットの製品を配置します。したがって、ループテストは失敗します。

+0

パーフェクトに思います。ありがとうございました。それはまさに正しいことです。 –

関連する問題