Linear SearchΒΆ
Searches for a value in an array.
1; Linear search: find 56 in array [12, 45, 7, 89, 23, 56, 34, 78]
2; Output: R16 = 5 (index), or 255 if not found
3
4start:
5 ; store array at RAM[0x60..0x67]
6 ldi r20, 0x60
7 ldi r21, 12
8 st r20, r21
9
10 ldi r20, 0x61
11 ldi r21, 45
12 st r20, r21
13
14 ldi r20, 0x62
15 ldi r21, 7
16 st r20, r21
17
18 ldi r20, 0x63
19 ldi r21, 89
20 st r20, r21
21
22 ldi r20, 0x64
23 ldi r21, 23
24 st r20, r21
25
26 ldi r20, 0x65
27 ldi r21, 56
28 st r20, r21
29
30 ldi r20, 0x66
31 ldi r21, 34
32 st r20, r21
33
34 ldi r20, 0x67
35 ldi r21, 78
36 st r20, r21
37
38 ; search for target = 56
39 ldi r17, 56 ; target
40 ldi r18, 0x60 ; address
41 ldi r19, 8 ; count
42 ldi r20, 0 ; index
43
44search_loop:
45 ld r21, r18 ; load value
46
47 ; if value == target, found
48 cp r21, r17
49 breq found
50
51 inc r18 ; next address
52 inc r20 ; next index
53 dec r19 ; count--
54
55 cpi r19, 0
56 brne search_loop
57
58not_found:
59 ldi r16, 255
60 jmp done
61
62found:
63 mov r16, r20
64
65done:
66 jmp done
Demonstrates sequential search and early loop exit.