looped

Loop while equal, ecx as the counter

Decrements ecx by one and jumps to the short target if the counter is non-zero and ZF is 1.

386 and later

Intel's reference: LOOP/LOOPcc

CFPFAFZFSFDFOF –––––––
  • Changes no flag
  • Reads ZF

Forms

  • looped

Operands

imm8
A branch target, written as a label or address. NASM calculates the displacement from the end of the instruction. The displacement must fit a signed byte, -128 to 127.

It leaves flags unchanged. A zero initial counter wraps to its maximum value when decremented.

The d suffix explicitly selects the 32-bit counter and 32-bit address size, including in 64-bit mode. The suffix chooses the counter width, not the branch displacement width.

Write a target label or address. NASM calculates a signed 8-bit displacement from the end of the instruction (−128 through 127 bytes). There is no longer near encoding.

global _start

section .text
_start:
        mov rcx, 5          ; the counter this family reads
        xor rax, rax
again:
        add rax, rcx
        cmp rax, 0          ; the conditional forms read the flags too
        looped again        ; jumps while ecx is not zero and the last comparison was equal

        mov rax, 60         ; syscall 60: exit
        xor rdi, rdi
        syscall