				;
				;		scalar product
				;
				
size				dcd		4
vector_a			dcd		1,2,3,4
vector_b			dcd		10,20,30,40
				
				mov		r3, #size
				ldr		r3,[r3]
				
				mov		r5,#vector_a
				mov		r6,#vector_b
				
				mov		r4, #0
				
scalar_prod_loop
				cmp		r3, #0
				beq		end_program
				
				ldr		r8, [r5] ; a[i]
				ldr		r9, [r6] ; b[i]
				stmdb	r13!, {r8, r9}
				bl		multiply ; branch with link, call the subroutine
				add		r13,r13,#8 ; remove r1 and r2
				
				add		r4, r4, r0 ; r4 = r4 + a[i]*b[i]
				
				add		r5,r5,#4
				add		r6,r6,#4
				sub		r3,r3,#1
				b		scalar_prod_loop
				
				;
				;		this is the mutiply subroutine
				;		Input:
				;		first and second operand on the stack
				;		Output:
				;		R0 = product
				;
multiply
				stmdb	r13!, {r4,r5} ; save R4 and R5
				ldr		r4, [r13, #8]
				ldr		r5, [r13, #12]
				mov		r0, #0 ; result = 0
				
multiply_loop
				cmp		r5,#0 ; b == 0 ??
				beq		end_multiply
				
				add		r0,r0,r4 ; r0 = r0 + r4, result = result + a
				sub		r5,r5,#1 ; r5 = r5 - 1, b = b - 1
				
				b		multiply_loop
end_multiply
				ldmia	r13!,{r4,r5} ; restore R5 and R4
				mov		pc, lr
				;
				;
				;
				
end_program
				end
				
