; ( n1 -- ) ; R(llimit counter -- limit counter+n1|) ; runtime of +loop ;VE_DOPLUSLOOP: ; .db 7, "(+loop)" ; .dw VE_HEAD ; .set VE_HEAD = VE_DOPLUSLOOP XT_DOPLUSLOOP: .dw PFA_DOPLUSLOOP PFA_DOPLUSLOOP: pop zl pop zh add zl, tosl adc zh, tosh loadtos PFA_DOPLUSLOOP4: ; entry point for (loop) pop temp2 pop temp3 cp zl, temp2 cpc zh, temp3 sbrs tosh, 7 ; if msb is set, increment is negative. in that case skip the next instruction rjmp PFA_DOPLUSLOOP2 ; jump to test for positive overflow brlt PFA_DOPLUSLOOP1 ; exit if underflow rjmp PFA_DOPLUSLOOP3 PFA_DOPLUSLOOP2: brge PFA_DOPLUSLOOP1 ; exit if overflow PFA_DOPLUSLOOP3: ; next iteration push temp3 push temp2 push zh push zl rjmp PFA_DOBRANCH ; read next cell from dictionary and jump to its destination PFA_DOPLUSLOOP1: pop temp0 pop temp1 ; remove leave destination adiw xl, 1 ; skip branch-back address rjmp DO_NEXT