Ah, got it, thanks. But why not 0 to 1 with step size 1?
Wouldn't that also give two passes, which should be sufficient, and which the said normal way also does?
I think it's clear now - mode 0 is used to suppress the error messages about yet-unseen labels in the first pass, and 3 to give the output with any errors. Meanwhile, by the end of the first pass, all labels would have been seen, so in the second pass, the assembler could insert the correct addresses for them, at the places where those labels were used in jump statements, even if some of those statements were before where the labels were defined.