0

我是 masm 和组装的新手,需要一些帮助。我已经在这上面花了大概 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
4

1 回答 1

1

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

于 2013-05-03T13:13:13.800 回答