0

私はmasmとアセンブリが初めてで、助けが必要です。私はすでにこれにおそらく6時間を費やしています。3 つのテキスト ボックスと 2 つのボタンがあります。ボタンの 1 つは、テキスト ボックスの数値を乗算して結果を 3 番目のテキスト ボックスに表示し、もう 1 つのボタンは、2 つのテキスト ボックスの数値を除算して結果を 3 番目のテキスト ボックスに表示します。ほとんどの場合、数字には小数が含まれます。

いろいろ試しましたが、これが一番近いと思うコードです。

分ける

invoke GetDlgItemInt,hWin,textbox1,NULL,TRUE
mov esi,eax
invoke GetDlgItemInt,hWin,textbox2,NULL,TRUE
mov edi,eax 

mov math1,esi

fild math1

mov math2,edi

fidiv math2

fstsw math3

invoke SetDlgItemInt,hWin,textbox3,math3,TRUE

かける

invoke GetDlgItemInt,hWin,textbox1,NULL,TRUE
mov esi,eax
invoke GetDlgItemInt,hWin,textbox2,NULL,TRUE
mov edi,eax 

mov math1,esi

fild math1

mov math2,edi

fimul math2

fstsw math3

invoke SetDlgItemInt,hWin,textbox3,math3,TRUE

。データ

math1   dd   ?
math2   dd   ?
math3   dw   ?

上記のコードでは、テキスト ボックスに間違った数値が表示されます。誰かが私に何をする必要があるか教えてください。

ありがとうございました

アップデート

このコードは機能します

LOCAL var1 :QWORD
LOCAL var2 :QWORD
LOCAL var3 :QWORD
LOCAL str1[19]:BYTE
LOCAL str2[19]:BYTE
LOCAL str3[19]:BYTE

invoke GetDlgItemText,hWin,textbox1,addr str1,9
invoke StrToFloat,addr str1,addr var1

invoke GetDlgItemText,hWin,textbox2,addr str2,9
invoke StrToFloat,addr str2,addr var2

finit
fld var1
fld var2
fdiv
fstp var3

invoke FloatToStr,var3,addr str3
invoke SetDlgItemText,hWin,textbox3,addr str3
4

1 に答える 1

1

FSTSW結果ではなくステータスワードを保存しています。必要なのはFISTP(整数の場合) またはFSTP(浮動小数点の場合) です。

于 2013-05-03T13:13:13.800 に答える