如何将常数值加载到浮点寄存器st0中?

时间:2019-03-25 13:41:23

标签: assembly x87 cheat-engine

我相信正确的方法如下:

const1:     dq  1.2345
...
     fld    const1

但是,我正在使用作弊引擎对游戏进行反向工程(这样我可以更好地理解它)。并且显示以下错误:

cheat engine showing the constant value cannot be loaded

有人可以告诉我这是怎么回事吗?理想情况下,我希望第二个命令是:

fstp dword [esi+ 3C]

但是在执行此操作之前,我需要将93.5值加载到st(0)寄存器中。我该如何实现?

1 个答案:

答案 0 :(得分:3)

有一系列与语法相关的错误导致您的问题。

“此指令无法编译” 您正在将数据放在代码段中。在newmem块之外和单独的内存块中定义变量。您尝试使用“ val:”定义内存块,但尚未分配该内存。您也必须在没有注册符号的情况下引用它。

要定义常规浮点数,请使用4字节变量而不是8字节变量,因此您使用“ dd”而不是“ dq”,其次,您需要将其“强制转换”为浮点数。

您想要将浮点数放入FPU堆栈的指令是这样写的: fld dword ptr [val]

像以前一样创建注入模板,然后在顶部插入此代码,然后继续执行操作,它具有我在答案中指出的所有内容,并且已经对其进行了测试:

alloc(newmem,2048)
label(returnhere)
label(originalcode)
label(exit)

alloc(val,8)

val:
dd (float)93.5

registersymbol(val)

newmem:
fld dword ptr [val]

请记住,您将需要使用生成的模板的其余部分,这仅仅是修复问题中出现的错误的代码。