用汇编如何调用函参数的函数 ( 积分: 13 )

  • 主题发起人 主题发起人 sunjunfeng3
  • 开始时间 开始时间
S

sunjunfeng3

Unregistered / Unconfirmed
GUEST, unregistred user!
function myfun(a:integer):integer;
begin
showmessage(IntToStr(a));
end;
procedure TForm1.Button1Click(Sender: TObject);
var
G:function(a:integer):integer;
i:integer;
begin
G := myfun;
asm
call g; //我用call调用函数的指针,可是怎么传递参数呢
end;

end;
 
procedure TForm1.Button1Click(Sender: TObject);
var
G:function(a:integer):integer;
i:integer;
begin
i := 15;
G := myfun;
asm
mov eax, i;
call g; //我用call调用函数的指针,可是怎么传递参数呢
end;
end;

Delphi 的fastcall/register 调用约定是通过EAX, EDX, ECX等调用规则传递参数的(更详细的请自己参照帮助或上网查资料)。
所以上面把参数调入到 EAX 寄存器就可以。
 
stdcall:push param
register:mov eax,i
 
后退
顶部