Учебники

Сборка — Петли

Инструкция 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 на экране —

Live Demo

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

Когда приведенный выше код компилируется и выполняется, он дает следующий результат —