Sjasm supports two loop statements: REPEAT and WHILE. You can use the REPEAT and WHILE statements to repeat a block of statements a number of times.
REPEAT repeats the block of statements between REPEAT and ENDREPEAT the given number of times. @# Will contain the number of iterations, starting with 0.
repeat 3 byte @# endrepeat
expands to:
byte 0 byte 1 byte 2
WHILE repeats the block as long as its argument is not zero. Again, @# contains the number of iterations and the block should end with ENDWHILE.
counter:=3 while counter byte counter,@# counter:=counter-1 endwhile
expands to:
byte 3,0 byte 2,1 byte 1,2
Loops can be nested and you can use @@#, @@@# and so on the access the number of iterations of the outer loops:
repeat 2 repeat 3 byte @#,@@# endrepeat endrepeat
expands to:
byte 0,0 byte 1,0 byte 2,0 byte 0,1 byte 1,1 byte 2,1
To exit a loop, use BREAK. You could use this to exit an endless loop:
while 1 l:=l+1 if l=3 break endif endwhile
To continue with the next iteration, use CONTINUE:
repeat 5 if @#<3 continue endif byte @# endrepeat
this outputs:
byte 3 byte 4