FPC的nostackframe
和Delphi的.NOFRAME
指令在64位asm函数中是否完全等效?
换句话说,下一个代码模板
procedure Naked(SomeArg: Integer);{$IFDEF FPC}nostackframe;{$ENDIF}
asm
{$IFNDEF FPC}
.NOFRAME
{$ENDIF}
..
end;
在Delphi和FPC中生成相同的裸64位asm函数?
答案 0 :(得分:2)
据我所知,.NOFRAME
(Delphi)和nostackframe
(FPC)都做同样的事情,即阻止生成堆栈帧。但请注意,它们生效的条件可能在两个编译器中不相同。
要获得源代码兼容性,还可以将{$ASMMODE INTEL}
用于FPC。
在大多数情况下,FPC64和DCC64 asm使用相同的语法,但在极少数情况下,内联汇编程序所理解的语法存在一些差异。另请注意,非Windows x64平台使用不同的调用约定。