アセンブリ-ループ
JMP命令は、ループの実装に使用できます。たとえば、次のコードスニペットは、ループ本体を10回実行するために使用できます。
MOV CL, 10
L1:
<LOOP-BODY>
DEC CL
JNZ L1
ただし、プロセッサ命令セットには、反復を実装するためのループ命令のグループが含まれています。基本的なLOOP命令の構文は次のとおりです。
LOOP label
ここで、labelは、ジャンプ命令のようにターゲット命令を識別するターゲットラベルです。LOOP命令は、ECX register contains the loop count。ループ命令が実行されると、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 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: