Assembly-programming-assembly-loops
提供:Dev Guides
アセンブリ-ループ
JMP命令は、ループの実装に使用できます。 たとえば、次のコードスニペットを使用して、ループ本体を10回実行できます。
MOV CL, 10
L1:
<LOOP-BODY>
DEC CL
JNZ L1
ただし、プロセッサ命令セットには、反復を実装するためのループ命令のグループが含まれています。 基本的なLOOP命令には次の構文があります-
LOOP label
ここで、_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 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: