Delphi调用约定

Register Calling Convention

Ojbect Pascal的默认调用约定为register,寄存器调用约定会将前三个参数依次放入eax,edx,ecx,返回值是eax(根据类型不同有差别).

function Add3Int(i,j,k:integer): integer;
//i,j,k依次放入eax,edx,ecx
asm
    add eax,edx
    add eax,ecx
end;

procedure TForm1.btnTestPureAsmClick(Sender: TObject);
begin
    ShowMessageFmt('i=%d',[Add3Int(1,2,3)]);  //结果为6
end;

How Values Are Returned from Delphi Functions.

Return Type     Return Method
Char,         Byte al register.
SmallInt,      Word ax register.
Integer, LongWord, AnsiString,  Pointer, class     eax register.
Real48         eax contains a pointer to data on the stack.
Int64         edx:eax register pair.
Single, Double, Extended, Comp       ST(0) on 8087’s register stack.

原文地址:https://www.cnblogs.com/wucg/p/4260147.html