CPU 提供了諸多寄存器, 但在 Delphi 的過程和函數中, 只有 EAX ECX EDX 三個寄存器可以自由使用;
如果改變了其他寄存器, 在過程和函數結束前要給恢復.
記得前面學習過 Delphi 的過程和函數默認的調用約定是 Register , 前三個參數通過寄存器傳遞, 其他參數存與棧.
它所指的三個寄存器就應該是 EAX ECX EDX 了.
看資料介紹應該是: EAX 先接受第一個參數再接受返回值, ECX EDX 接受後面兩個參數.
但我不能進行完整的測試.//測試三個自由寄存器: EAX ECX EDX
procedure Proc(x,y,z: Integer);
var
a,b: Integer;
begin
asm
MOV a,ECX
MOV b,EDX
end;
ShowMessage(Format('%d,%d',[a,b]));
{EAX 我測試不了}
end;
//測試
procedure TForm1.Button1Click(Sender: TObject);
begin
Proc(11,22,33); {顯示: 33,22}
{看來寄存器 ECX 儲存的是第三個參數; EDX 儲存第二個參數}
end;