我如何在Embarcadero Delphi XE5中为Android编写ARM汇编代码?最好能够内联编写。
Delphi移动编译器不支持asm ... end
块。
但是,由于我们正在谈论的是一个本地编译器,因此“旧的好方法”仍然可用。
您可以使用外部汇编器(例如GNU AS)编译自己的模块,然后将其链接到Delphi XE*应用程序中。
例如,System.RTTI
通过外部静态链接文件使用低级别的asm技巧:
procedure RawInvoke(CodeAddress: Pointer; ParamBlock: PParamBlock);
external 'librtlhelper.a' name 'rtti_raw_invoke';
procedure RawIntercept;
external 'librtlhelper.a' name 'rtti_raw_intercept';
看一下这篇日文文章- 谷歌翻译是你的好朋友!(点击此处阅读)
你做不到。
LLVM是Delphi Mobile引擎的背后,它有一种汇编语言:http://llvm.org/docs/CommandGuide/llvm-as.html。但它几乎不可能是ARM或x86类型的,因为LLVM试图成为CPU无关的。
无论如何,Delphi官方都不支持CPU本地汇编语言或LLVM类型的汇编语言。
RawInvoke()
和RawIntercept()
直接在Rtti.pas
中以汇编语言编写。对于ARM,Embarcadero保持使用汇编语言并根据需要进行调整,而不是将其翻译成更高级别的语言。为什么你认为RTL仍然在其核心例程中使用内联汇编,并从未启用它们的PUREPASCAL版本?它们在汇编语言中更有效率。 - Remy Lebeau