Delphi和FPC中的裸64位asm函数

时间:2014-10-21 16:54:57

标签: delphi assembly fpc basm

FPC的nostackframe和Delphi的.NOFRAME指令在64位asm函数中是否完全等效?

换句话说,下一个代码模板

procedure Naked(SomeArg: Integer);{$IFDEF FPC}nostackframe;{$ENDIF}
asm
{$IFNDEF FPC}
        .NOFRAME
{$ENDIF}
  ..
end;

在Delphi和FPC中生成相同的裸64位asm函数?

1 个答案:

答案 0 :(得分:2)

据我所知,.NOFRAME(Delphi)和nostackframe(FPC)都做同样的事情,即阻止生成堆栈帧。但请注意,它们生效的条件可能在两个编译器中不相同。

要获得源代码兼容性,还可以将{$ASMMODE INTEL}用于FPC。

在大多数情况下,FPC64和DCC64 asm使用相同的语法,但在极少数情况下,内联汇编程序所理解的语法存在一些差异。另请注意,非Windows x64平台使用不同的调用约定。