Delphi 內嵌組合語言可直接調用 Pascal 函數,遵循 register 調用約定:前三個參數分別通過 EAX、EDX、ECX 傳遞,返回值在 EAX。本文示範完整調用流程。
| 參數序號 | 寄存器 | 備註 |
|---|---|---|
| 1 | EAX | 亦用於返回值 |
| 2 | EDX | |
| 3 | ECX | |
| >3 | 堆疊 | 右至左壓入 |
{ Pascal 函數 }
function DelphiFun(x, y: Integer): Integer;
begin
Result := x + y;
end;
{ 組合語言調用 }
function AsmFun: Integer;
asm
mov eax, 1 { 參數 1 → EAX }
mov edx, 2 { 參數 2 → EDX }
call DelphiFun { 調用,返回值在 EAX }
end;
{ 測試 }
procedure TForm1.Button1Click(Sender: TObject);
var
num: Integer;
begin
num := AsmFun;
ShowMessage(IntToStr(num)); { 3 }
end;
CALL 後堆疊自動平衡 (由被調函數 RET 處理)Self 為第一參數 (EAX),需手動載入function GetTickCountAsm: Cardinal;
asm
call GetTickCount { 系統 API,stdcall 約定,參數堆疊傳遞 }
{ 返回值在 EAX }
end;
掌握組合與 Pascal 互調是實現高效能混合編程的關鍵技能。