彙編——迴圈



JMP 指令可用於實現迴圈。例如,可以將以下程式碼段用於執行迴圈體 10 遍。

MOV	CL, 10
L1:
<LOOP-BODY>
DEC	CL
JNZ	L1

然而,處理器指令集包括一組迴圈指令,用於迴圈迭代。基本 LOOP 指令的語法如下 −

LOOP 	label

其中,標籤是目標標籤,用於標識目標指令,正如跳轉指令中一樣。LOOP 指令假設 ECX 暫存器包含迴圈計數。執行 LOOP 指令時,ECX 暫存器減 1,並且控制跳轉到目標標籤,直至 ECX 暫存器值(即計數器)達到零。

上述程式碼段可寫為 −

mov ECX,10
l1:
<loop body>
loop l1

示例

以下程式在螢幕上列印數字 1 到 9 −

section	.text
   global _start        ;must be declared for using gcc
	
_start:	                ;tell linker entry point
   mov ecx,10
   mov eax, '1'
	
l1:
   mov [num], eax
   mov eax, 4
   mov ebx, 1
   push ecx
	
   mov ecx, num        
   mov edx, 1        
   int 0x80
	
   mov eax, [num]
   sub eax, '0'
   inc eax
   add eax, '0'
   pop ecx
   loop l1
	
   mov eax,1             ;system call number (sys_exit)
   int 0x80              ;call kernel
section	.bss
num resb 1

編譯並執行以上程式碼後,會產生以下結果 −

123456789:
廣告