首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> Delphi

Delphi 內嵌組合語言教學 (23):LOOP 指令實現計數循環

     編輯:Delphi

LOOP 指令結合 ECX 計數寄存器,實現硬體級計數循環:每次執行遞減 ECX,若非零則跳轉至標號。指令編碼短、無需額外比較指令,適合簡單計數循環。

語法與原理

mov ecx, count   { 載入循環次數 }
@@Label:
  { 循環體 }
  loop @@Label     { ECX-- ; if ECX != 0 then JMP @@Label }

代碼範例:計算 x^n

function Power(x, n: Integer): Integer;
asm
  { EAX 已含 x (第一參數) }
  mov ecx, n       { ECX = n }
  sub ecx, 1       { 已乘 1 次,剩 n-1 次 }
@@Loop:
  add eax, eax     { EAX *= 2 (此處為示範,實際應用用 MUL) }
  loop @@Loop
end;

測試代碼

procedure TForm1.Button1Click(Sender: TObject);
begin
  ShowMessage(IntToStr(Power(2, 10)));  { 1024 }
end;

重要限制與現代替代方案

限制說明
僅支援 ECX/RCX不能指定其他寄存器計數
跳轉範圍限制短跳轉 (-128~+127 位元組)
現代 CPU 效能較差分支預測器難以優化,比 DEC/JNZ 慢
64 位模式用 RCX同樣適用

推薦現代寫法

mov ecx, count
@@Label:
  { 循環體 }
  dec ecx
  jnz @@Label   { 無短跳轉限制,分支預測友好 }

教學階段理解 LOOP 即可,實際優化代碼請使用 DEC/JNZ 或編譯器生成的循環。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved