Delphi 組合語言中,**常量支援編譯期運算**,變量僅支援運行期指令運算。這一差異源於常量在編譯期已知數值,編譯器可直接計算結果嵌入機器碼。
function Fun: Integer;
const
a = 11;
b = 5;
asm
mov eax, a - b { 編譯器計算 11-5=6,生成 mov eax, 6 }
end;
function Fun: Integer;
var
x, y: Integer;
asm
mov x, 11
mov y, 5
{ mov eax, x - y 錯誤!不支援變量運算式 }
mov eax, x
sub eax, y { 正確:用 SUB 指令 }
end;
procedure TForm1.Button1Click(Sender: TObject);
var i: Integer;
begin
i := Fun;
ShowMessage(IntToStr(i)); { 兩種寫法均返回 6 }
end;
| 特性 | 常量 | 變量/參數 |
|---|---|---|
| 運算支援 | 編譯期表達式 (+ - * / 等) | 僅單指令 (MOV/ADD/SUB 等) |
| 地址取值 | 無地址 (立即數) | 有地址 (需 & 取址或直接用名) |
| 類型檢查 | 編譯期嚴格 | 運行期由指令決定 |
| 優化 | 常量摺疊、死代碼消除 | 寄存器分配、指令排程 |
const 定義魔數提升可讀性與效能