我在masm中有这个代码来处理FPU并且效果很好
在这段代码中,我从2个不同的文本框中获取一个数字,然后将它们分开,然后将结果输出到另一个文本框
这是本地数据
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
这是我到目前为止所做的,但它不起作用textbox3只是说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
我知道这段代码不对,因为我没有在开头将文本转换为浮动,但我不知道如何
我还尝试了一个更简单的版本,它也无法正常工作
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
所以我的问题是有人可以告诉我如何从2个不同的文本框中读取数字,然后将它们分开并将结果返回到另一个文本框 使用fasm代码
谢谢
答案 0 :(得分:0)
演示代码中存在几个问题。
首先,不清楚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]