省略汇编程序函数的汇编程序关键字

时间:2015-01-06 01:27:53

标签: freepascal

是否有编译器开关我没有看到允许我从汇编程序函数中省略汇编关键字?

我现在如何使用FPC文档中的示例:

function geteipasebx : pointer;assembler;  
asm  
  movl (%esp),%ebx  
  ret  
end;

我想怎么做:

function geteipasebx : pointer;
asm  
  movl (%esp),%ebx  
  ret  
end; 

可以这样做吗?

编辑:
编译器源文件PSUB.PAS第170行:

{ do we have an assembler block without the po_assembler?
  we should allow this for Delphi compatibility (PFV) }
 if (token=_ASM) and (m_delphi in current_settings.modeswitches) then
  include(current_procinfo.procdef.procoptions,po_assembler);

{ Handle assembler block different }
 if (po_assembler in current_procinfo.procdef.procoptions) then ...

我相信free pascal源代码的这一部分意味着这只能在{$ MODE DELPHI}中完成。

1 个答案:

答案 0 :(得分:2)

是的,这可以做到。您必须将编译器兼容性模式设置为DELPHI并将asm语法重新定义为ATT,因为模式DELPHI会将其覆盖为INTEL

更具体地说,该计划:

program Project1;
{$MODE DELPHI}
{$ASMMODE ATT}
function geteipasebx : pointer;
asm
  movl (%esp),%ebx
  ret
end;

var
  p: pointer;
begin
  p := geteipasebx;
end.

编译并运行正常。