是否有编译器开关我没有看到允许我从汇编程序函数中省略汇编关键字?
我现在如何使用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}中完成。
答案 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.
编译并运行正常。