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: