我正在尝试使用 vs2008 将程序移植到 x64。然而,问题在于,这是一些 x64 不支持的内联 asm 代码。此 asm 代码用于将具有未知类型或编号的参数从 dll 推送到函数。它是一个基于解释器的程序,您可以在其中指定要从某个 dll 使用的函数,并且程序会推送参数并在编译时调用该函数。
使用各种来源,我得出的结论是生成单独的 .asm 文件,其中包含 asm 函数,这些函数可以编译为 unsing masm 及其链接到 vs2008 的 obj 文件。为 x86 和 x64 使用不同的文件,程序为这两个问题构建。然而问题是,这些函数不能复制内联汇编正在做的事情。
我转换了以下内联代码,例如:
double a = Evaluate(arg[i]).num;
_asm push a + 4
_asm push a
j += 8;
到:
double a = Evaluate(arg[i]).num;
EvaluateFuncArgFloat(a);
j += 8;
使用以下 .asm 文件:
TITLE EvaluateFuncArgFloat (evaluate_asm.asm)
.386
.model flat, C
.code
EvaluateFuncArgFloat PROC a:DWORD
push a + 4
push a
ret
EvaluateFuncArgFloat ENDP
END
这不符合我的预期。double 根本不会像使用内联 asm 时那样在函数中结束。
我的猜测是有一个小错误或我遗漏的东西,但经过多次尝试后,我似乎无法让它工作。希望有人可以帮助我解决这个问题,非常感谢。