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

Delphi 內嵌組合語言教學 (22):在組合代碼中訪問記錄結構

     編輯:Delphi

Delphi 內嵌組合語言支援直接以 寄存器.類型名.欄位名 語法訪問記錄結構成員,編譯器自動計算偏移量,避免手工計算錯誤,代碼可讀性大增。

語法格式

MOV 寄存器.記錄類型.欄位名, 值
MOV 目標, 寄存器.記錄類型.欄位名

代碼範例

type
  TMyRec = record
    i: Integer;
    c: Char;
  end;

procedure FillRec(var Rec: TMyRec);
asm
  mov eax.TMyRec.i, 100  { EAX 接收第一參數 (記錄地址) }
  mov eax.TMyRec.c, 'M'
end;

procedure TForm1.Button1Click(Sender: TObject);
var
  myRec: TMyRec;
begin
  FillRec(myRec);
  ShowMessage(Format('%d, %s', [myRec.i, myRec.c]));  { 100, M }
end;

進階:巢狀記錄與陣列

type
  TInner = record x, y: Integer; end;
  TOuter = record
    inner: TInner;
    arr: array[0..3] of Integer;
  end;

asm
  mov eax.TOuter.inner.x, 1
  mov eax.TOuter.arr[2], 99  { 陣列元素訪問 }
end;

關鍵優勢

  • 型別安全:編譯期檢查欄位存在性與類型匹配
  • 偏移自動計算:無需手寫 [EAX+4] 等易錯代碼
  • 重構友好:調整記錄定義後組合代碼自動適應
  • 可讀性:語義清晰,接近高級語言風格

注意事項

  • 記錄必須在組合代碼可見範圍內定義 (interface 或 implementation 區)
  • 傳值參數會複製記錄,修改不影響原值;需用 var/out 傳址
  • 位域、變體記錄等複雜結構可能不完全支援
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved