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] 等易錯代碼var/out 傳址