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 zaixian
	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:

上一篇: Assembly 條件 下一篇: Assembly 數字