summaryrefslogtreecommitdiff
path: root/Year_1/Computer_Architecture/odd_even_numbers.asm
blob: 996fd62fa2441011894201a2b32b9b3871fc6f10 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
arr_n		dcd		8
array		dcd		1, 2, 4, 6, -5, 8, 7, 3
s_arr		dcd		0
			
			mov		r0, #arr_n
			ldr		r0, [r0]
			mov		r1, r0
			
			mov		r4, #1		; 0 = even, 1 = odd
			mov		r6, #0		; number of elements on new sequence
			
			mov		r2, #s_arr
			
			mov		r1, #array
			
loop
			cmp		r0, #0
			beq		end_program
			ldr		r3, [r1], #4
			mov		r5, r3
			
			and		r5, r3, #1
			cmp		r5, r4		; check if element stored in r3 is odd or even
			beq		data_store
subn_loop
			sub		r0, r0, #1
			b		loop
			
data_store
			str		r3, [r2], #4
			add		r6, r6, #1
			b		subn_loop
			
end_program
			str		r6, [r2]
			end