// Text-only number printing procedure used by urclelf.

@DEFINE NUMBER R1
@DEFINE CHAR_COUNT R2
@DEFINE DIGIT R3

MOV NUMBER 420                      // int number = 420;
MOV CHAR_COUNT 0                    // int char_count = 0;
BRP .loop_1 NUMBER                  // if(number < 0) {...
    NEG NUMBER NUMBER               //     number = -number;
    OUT %TEXT '-'                   //     print('-');
                                    // }
.loop_1                             // while(number) {
    MOD DIGIT NUMBER 10             //     digit = number % 10;
    ADD DIGIT DIGIT '0'             //     digit = ascii(digit);
    PSH DIGIT                       //     push(digit);
    DIV NUMBER NUMBER 10            //     number /= 10;
    INC CHAR_COUNT CHAR_COUNT       //     char_count++;
    BNZ .loop_1 NUMBER              // }

.loop_2                             // while(char_count)
    POP DIGIT                       //     digit = pop();
    OUT %TEXT DIGIT                 //     print(digit);
    DEC CHAR_COUNT CHAR_COUNT       //     char_count--;
    BNZ .loop_2 CHAR_COUNT          // }
OUT %TEXT '\n'                      // print('\n');
HLT                                 // exit();