【发布时间】:2016-10-04 08:37:57
【问题描述】:
我在 Delphi 10.1 中的项目有一些像这样的汇编函数:
function MyFunc: Word;
asm
PUSH 0
FNSTCW [ESP].Word
POP EAX
end;
我需要在 win64 中编译项目,但是像 POP EAX 这样的一些行有 E2116 Invalid combination of opcode and operands 错误。
【问题讨论】:
-
使用系统单元的 Get8087CW 函数,它应该适用于两个平台(Win32/Win64)。
-
x86_64 不支持 32 位推送/弹出
-
请注意,x86 和 x64 在其调用约定中使用不同命名的寄存器,并且通常使用不同的操作码。强烈考虑@AndreiGalatyn 的建议,因为您将不得不(至少)复制所有功能。
-
您的问题是什么?努力解决?
-
为什么你的64位码要知道8087控制字?它不使用 8087 单元进行浮点数学运算。它使用 SSE 单元。你已经超前了。第 1 步是全面了解您的代码存在的原因以及它的用途。不要只按字面意思翻译。