.loop
This directive terminates the last defined .for or .repeat loop.
.for i, 0, 7 .db 1<<i .loop ; This assembles as: .db %00000001 .db %00000010 .db %00000100 .db %00001000 .db %00010000 .db %00100000 .db %01000000 .db %10000000
Using Brass's conditionals, you can use it to assemble slightly different blocks of code on each loop. For example, a sprite routine that would need to do the same shifting operations but in one case AND the mask then OR the sprite data:
.for i, 1, 2
call _shift_sprite
_sprite_loop_{i}: ; To ensure different label names each loop
ld a,(de)
.if i == 1
and (hl)
.else
or (hl)
.endif
ld (hl),a
inc hl
inc de
call _update_pointers
djnz _sprite_loop_{i}
.loop
Naturally, for-loops can be nested.
.for y,0,7
.for x,0,7
.db x+y*2
.loop
.loop