我用masm编写了这个代码来处理fpu,效果很好
在这段代码中,我从两个不同的文本框中获取一个数字,然后将它们分开,然后将结果输出到另一个文本框
这是本地的数据
LOCAL variable1 :QWORD
LOCAL variable2 :QWORD
LOCAL variable3 :QWORD
LOCAL string1[20]:BYTE
LOCAL string2[20]:BYTE
LOCAL string3[20]:BYTE
这是密码
invoke GetDlgItemText,hWin,textbox1,addr string1,9
invoke StrToFloat,addr string1,addr variable1
invoke GetDlgItemText,hWin,textbox2,addr string2,9
invoke StrToFloat,addr string2,addr variable2
finit
fld variable1
fld variable2
fdiv
fstp variable3
invoke FloatToStr,variable3,addr string3
invoke SetDlgItemText,hWin,textbox3,addr string3
我想把代码转换成fasm
这是我目前所掌握的,但它不起作用,文本框3只是说0
这是数据(这不是本地数据,因为我还没有学会如何在fasm中这样做)
v1 dq ?
v2 dq ?
v3 dd ?
v4 rb 20
这是密码
invoke GetDlgItemTextA,[hWin],textbox1,addr v1,100
invoke GetDlgItemTextA,[hWin],textbox2,addr v2,100
finit
fld qword [v1]
fld qword [v2]
fdivp
fstp qword [v3]
cinvoke wsprintfA,addr v4,"%u",[v3]
invoke SetDlgItemTextA,[hWin],textbox3,addr v4
我知道这段代码是不对的,因为我没有在开始时将文本转换为float,但是我不知道如何
我也试过一个更简单的版本,但也没用
mov [v1],5.3
mov [v2],7.1
finit
fld [v1]
fld [v2]
fdivp
fstp [v3]
cinvoke wsprintfA,addr v4,"%u",[v3]
invoke SetDlgItemTextA,[hWin],maximumoutputpowertext,addr v4
所以我的问题是,有人能告诉我如何从两个不同的文本框中读取一个数字,然后将它们分开,然后将结果返回到另一个文本框吗?
使用fasm代码
谢谢您
最佳答案
演示的代码中有几个问题。
首先,不清楚StrToFloat
程序是什么?它是从某个dll导入的,还是它是代码的一部分,或者是其他库的一部分?
如果这个过程被导入,它也必须被导入到fasm程序中。否则,它可以从头开始编写,也可以从masm程序以源代码形式移植。
这里的即时显示停止符是mov [v1], FLOAT_CONSTANT
指令。原因是v1
是qword变量,但mov
只能移动dword立即数(即使在64位环境中)。mov dword [v1], 5.0
工作正常,但这当然不是OP需要的。
浮点qword常量也可以在编译时立即定义:v1 dq 3.2
如果我们真的想在运行时设置一些qword浮点常量,我们必须按照以下两种方式使用它:
a = 5.3
mov dword [var], (a and $ffffffff)
mov dword [var+4], (a shr 32)
var dq ?
fasm语法中的原始fpu代码将是:
finit
fld [variable1]
fdiv [variable2]
fstp [variable3]