Assembly 迴圈


JMP指令可用於實現迴圈。例如,下面的程式碼片段可用於執行迴圈體10次。

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

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

LOOP 	label

其中,標籤是物件標註,標識中的跳轉指令的目標指令。LOOP指令假定ECX暫存器包含迴圈計數值。當迴圈指令被執行時,ECX暫存器遞減,控制跳轉到目標標籤直到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 yiibai
	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: