MOV R0, #100D ; k := 100 MOV R1, #0 ; sum'HIGH := 0 MOV R2, #0 ; sum'LOW := 0 DO_WHILE: CLR C ; bit C := 0 MOV B, #7 ; div_by := 7 MOV A, R0 ; k -> ACC DIV AB ; A.B = A / B MOV A, B ; to use CJNE, B -> A CJNE A, #0, NEXT_VAL // Add k to sum MOV A, R2 ; sum'LOW -> ACC ADD A, R0 ; ACC := sum'LOW + k MOV R2, A ; save new value JNC NEXT_VAL // If we have data that takes > 2 bytes INC R1 NEXT_VAL: MOV A, R0 ; check if k == 200 SUBB A, #200D JZ PRE_END ; then end the cycle INC R0 ; k++ JMP DO_WHILE PRE_END: END