loopz
Loop while zero
Decrements rcx by one and jumps to the short target if the counter is non-zero and ZF is 1.
8086 and later
CFPFAFZFSFDFOF –––––––
- Changes no flag
- Reads ZF
Forms
loopzloopz , ecx386 and laterloopz , rcx
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,
-128to127.
loope / loopz additionally require ZF = 1; loopne / loopnz require ZF = 0. The instructions do not change flags.
In 64-bit mode, the default counter is rcx; a32 selects ecx. A 16-bit cx counter is unavailable in this mode. A zero initial counter wraps to its maximum value when decremented.
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
loopz again ; jumps while rcx is not zero and the zero flag is set
mov rax, 60 ; syscall 60: exit
xor rdi, rdi
syscall