在 asm 塊中,& 操作符用於獲取 Delphi 變量的地址。當變量名與寄存器名衝突時,& 成為必須,用於區分變量與寄存器。
procedure Proc(str1, str2: string);
var s1, s2: string;
begin
asm
mov ecx, &str1
mov edx, &str2
mov &s1, ecx
mov &s2, edx
end;
ShowMessage(s1 + s2);
end;
無歧義時 & 可省略。
procedure TForm1.Button2Click(Sender: TObject);
var ecx: Integer; {與寄存器 ECX 重名}
begin
ecx := 99;
asm
mov ecx, &ecx {左側 ECX 為寄存器,右側 &ecx 為變量}
add ecx, 1
mov &ecx, ecx
end;
ShowMessage(IntToStr(ecx)); {100}
end;
結論: 所有局部變量在組合語言中均可加 & 取地址,遇到與寄存器/指令同名時必須加 & 消除歧義。