masm FPU到fasm FPU无法翻译,它不起作用

时间:2013-09-04 15:58:39

标签: windows assembly masm fasm

我在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代码

谢谢

1 个答案:

答案 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]