2025-02-08 21:28:20 +02:00
|
|
|
.syntax unified
|
|
|
|
.cpu cortex-m4
|
|
|
|
.thumb
|
|
|
|
|
2025-02-08 22:12:20 +02:00
|
|
|
.macro BKPT_WRITE addr_src
|
|
|
|
mov r1, \addr_src
|
2025-02-09 13:38:57 +02:00
|
|
|
mov r0, 0x4
|
2025-02-08 22:12:20 +02:00
|
|
|
bkpt 0xAB
|
|
|
|
.endm
|
|
|
|
|
2025-02-09 19:41:52 +02:00
|
|
|
#define A 0x0321
|
|
|
|
#define B 0x7005
|
|
|
|
#define C 0x0050
|
|
|
|
|
2025-02-08 21:28:20 +02:00
|
|
|
.section .text
|
|
|
|
|
|
|
|
lab1_v2:
|
2025-02-09 15:23:45 +02:00
|
|
|
push.n {lr}
|
|
|
|
|
2025-02-09 19:41:52 +02:00
|
|
|
bl calculate_formula_v2
|
|
|
|
bl int_to_str
|
|
|
|
|
2025-02-09 15:23:45 +02:00
|
|
|
pop.n {pc}
|
|
|
|
|
2025-02-09 19:41:52 +02:00
|
|
|
calculate_formula_v2:
|
|
|
|
ldr r0, =A
|
|
|
|
ldr r1, =B
|
|
|
|
ldr r2, =C
|
|
|
|
|
|
|
|
cmp r0, r1
|
|
|
|
bgt gret
|
|
|
|
blt less
|
|
|
|
|
|
|
|
same: @ default
|
|
|
|
add r2, r0, r2, lsr #3
|
|
|
|
add r0, r2, r1
|
|
|
|
b finish
|
|
|
|
|
|
|
|
gret:
|
|
|
|
rsb r0, r0, #192
|
|
|
|
sub r0, r0, r1
|
|
|
|
add r0, r2, r0, lsl #2
|
|
|
|
b finish
|
|
|
|
|
|
|
|
less:
|
|
|
|
orr r1, r1, r2
|
|
|
|
mul r0, r0, r1
|
|
|
|
|
|
|
|
finish:
|
|
|
|
mov r10, r0
|
|
|
|
mov pc, lr
|
|
|
|
|
2025-02-09 15:23:45 +02:00
|
|
|
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
|
2025-02-08 21:28:20 +02:00
|
|
|
|
2025-02-09 15:23:45 +02:00
|
|
|
BKPT_WRITE r3
|
2025-02-08 21:28:20 +02:00
|
|
|
|
2025-02-09 15:23:45 +02:00
|
|
|
mov pc, lr
|