.text
.align 2


.global secret

@ Funkcija:
@
@ int secret(int x);
@
@ racuna tajni broj datog broja x. Argument funkcije je:
@
@ r0 -- int x
@	
secret:
	@ Prolog funkcije
	stmfd sp!, {fp, lr}
	mov fp, sp

	@ Cuvamo na steku vrednosti registara koje cemo koristiti.
	stmfd sp!, {r4-r6}

	@ U r4 smestamo broj x
	mov r4, r0


next_number:
	@ Dokle god je broj dvocifren
	cmp r4, #10
	blt last_number

	@ U r5 smestamo sumu cifara (inicijalno nula)
	mov r5, #0
	
next_iter:
	@ Dokle god ne izdvojimo sve cifre
	cmp r4, #0
	beq last_iter
	
	@ Racunamo ostatak pri deljenju sa 10. To je upravo sledeca 
	@ cifra koju dodajemo na sumu.
	mov r0, r4
	mov r1, #10
	bl __modsi3
	add r5, r5, r0

	@ Racunamo celobrojni kolicnik. To je nova vrednost broja.
	mov r0, r4
	mov r1, #10
	bl __divsi3
	mov r4, r0
	
	@ Prelazimo na sledecu iteraciju.
	b next_iter
last_iter:

	@ Zbir cifara je novi broj.
	mov r4, r5	
	b next_number
last_number:

	@ Smestamo tajni broj u r0
	mov r0, r4

	@ Vracamo vrednosti registara koje smo koristili.
	ldmfd sp!, {r4-r6}
	

	@ Epilog funkcije
	mov sp, fp
	ldmfd sp!, {fp, pc}
