.syntax unified .cpu cortex-m4 .thumb .macro BKPT_WRITE addr_src mov r1, \addr_src mov r0, 0x4 bkpt 0xAB .endm .section .text lab1_v2: push.n {lr} mov r0, #2073 bl int_to_str pop.n {pc} int_to_str: mov r3, sp @ write newline + NULL terminator mov r5, #0x000A strh r5, [r3, #-2]! @ --- handmade modulo --- mov r4, #10 iterate: mov r1, r0 @ save orig to r1 udiv r0, r0, r4 @ orig/10 and overwrite old orig value mul r2, r0, r4 @ orig/10*10, place separately subs r5, r1, r2 @ orig - orig/10*10 => modulo (and update flags) beq check_if_pending_digits_exist proceed_with_conversion: add r5, #48 @ int -> char (only digits, so it's fine) strb r5, [r3, #-1]! @ write next char to RAM b iterate check_if_pending_digits_exist: cmp r0, #0 bne proceed_with_conversion finish: BKPT_WRITE r3 mov pc, lr