首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> Delphi

Delphi 內嵌組合語言教學 (25):在組合代碼中調用 Delphi 函數

     編輯:Delphi

Delphi 內嵌組合語言可直接調用 Pascal 函數,遵循 register 調用約定:前三個參數分別通過 EAX、EDX、ECX 傳遞,返回值在 EAX。本文示範完整調用流程。

調用約定對應

參數序號寄存器備註
1EAX亦用於返回值
2EDX
3ECX
>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;

關鍵注意事項

  • 寄存器保護:被調函數可能修改 EAX/ECX/EDX,調用者需自行保存
  • 堆疊平衡:CALL 後堆疊自動平衡 (由被調函數 RET 處理)
  • 名稱修飾:Delphi 函數名在組合中直接使用,連結器解析
  • 方法調用:實例方法隱含 Self 為第一參數 (EAX),需手動載入

進階:調用 Windows API

function GetTickCountAsm: Cardinal;
asm
  call GetTickCount  { 系統 API,stdcall 約定,參數堆疊傳遞 }
  { 返回值在 EAX }
end;

掌握組合與 Pascal 互調是實現高效能混合編程的關鍵技能。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved