masm汇编如何使用fpu划分和乘以数字

时间:2013-05-03 12:34:03

标签: winforms math assembly masm fpu

我是masm和assembly的新手,需要一些帮助。我已经花了大概6个小时。我有3个文本框和2个按钮。我希望其中一个按钮将文本框中的数字相乘,并在第三个文本框中显示结果,另一个按钮将数字分成两个文本框,并在第三个文本框中显示结果。数字几乎总是会有小数。

我尝试了很多东西,但这是我认为最接近的代码。

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

1 个答案:

答案 0 :(得分:1)

FSTSW存储状态字,而不是结果。你需要的是FISTP(对于整数)或FSTP(对于浮点)。