在 Delphi 內嵌組合語言中處理 var 或 out 參數時,寄存器中存放的是參數的地址而非值。必須使用方括號 [] 進行解引用取值,類似於 Delphi 中的指標解引用 P^。
function Fun(var x, y: Integer): Integer;
asm
mov eax, x {eax 現在保存的是 x 的地址}
mov eax, [eax] {[eax] 取值,類似 P^}
mov edx, y
add eax, [edx] {將 y 的值加到 eax}
{mov @Result, eax 此處可省略,EAX 默認即為返回值}
end;
procedure TForm1.Button1Click(Sender: TObject);
var
a, b: Integer;
begin
a := 1;
b := 8;
a := Fun(a, b);
ShowMessage(IntToStr(a)); {顯示 9}
end;
關鍵點: 方括號 [] 是組合語言中取內存值的標準語法,對應高級語言的指標解引用操作。