【发布时间】:2013-03-22 14:05:46
【问题描述】:
我在 Delphi XE3 中使用 64 位内联汇编程序遇到了这个问题,我不明白。
我试过了,它适用于 32 位和 64 位
function test(a, b: integer): integer; assembler; register;
asm
mov eax, a
add eax, edx
end;
但是,这仅适用于 32 位而不适用于 64 位,在 64 位中它可以编译,但不会返回两个整数之和的正确结果。
function test(a, b: integer): integer; assembler; register;
asm
add eax, edx
end;
我知道以前的 FPU 代码如 FLD、STP 在 32 位上工作,但在 64 位编译器上会出现编译错误。知道如何在 64 位中处理浮点数吗?
【问题讨论】:
-
“谁能给我一个快速教程”不是一个好的 Stack Overflow 问题。更重要的是,问题中的代码使用 32 位整数单元,但您实际上对 FPU 代码感兴趣。这在 64 位中完全不同。我最强烈的建议是将所有汇编代码移植到 Pascal 并让编译器完成繁重的工作。
-
其实,朋友!当你看到 thios 的东西时,你只需要打开 CPU 窗口并比较哪些寄存器是进入的参数。如果你使用汇编器 - 那么在汇编器中调试就是你的家!如果不是 - 那么你最好问问知道 CPU、寄存器和汇编器是什么的人。
-
@Arioch'调试器中的反复试验不是学习 MS x64 ABI 的方法。官方文档是怎么做的。
-
@David 不错的链接,但我没有看到任何对 Delphi 的引用。我也无法在msdn.microsoft.com/en-us/library/02c56cw3.aspx 找到集合、字符串、TObject 和 TCLass,然后我在 Google 上搜索
link:msdn.microsoft.com/en-us/library/ms235286.aspx site:docwiki.embarcadero.com,然后……再也找不到了。似乎没有文档表明 Delphi 程序应该依赖该 MSDN 页面。 Delphi 的唯一官方文档是 DocWiki 上的文档。如果没有,那么就没有。阅读与 Delphi MSDN 无关的内容就像查看 Delphi 调试器一样“反复试验”。 -
@David,很抱歉上面说的很严厉,但是在我嘴里发现有人说我没有写的废话,这很痛苦。
标签: delphi assembly 64-bit x86-64 basm