Инструкция 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
Когда приведенный выше код компилируется и выполняется, он дает следующий результат —