Reverse ArrayΒΆ
Reverses an array in place.
1; Reverse: reverse array [10, 20, 30, 40, 50, 60]
2; Output: RAM[0x60..0x65] = [60, 50, 40, 30, 20, 10]
3
4start:
5 ; store array at RAM[0x60..0x65]
6 ldi r20, 0x60
7 ldi r21, 10
8 st r20, r21
9
10 ldi r20, 0x61
11 ldi r21, 20
12 st r20, r21
13
14 ldi r20, 0x62
15 ldi r21, 30
16 st r20, r21
17
18 ldi r20, 0x63
19 ldi r21, 40
20 st r20, r21
21
22 ldi r20, 0x64
23 ldi r21, 50
24 st r20, r21
25
26 ldi r20, 0x65
27 ldi r21, 60
28 st r20, r21
29
30 ; reverse: swap from both ends
31 ldi r16, 0x60 ; left = 0x60
32 ldi r17, 0x65 ; right = 0x65
33
34reverse_loop:
35 ; check if left >= right
36 cp r16, r17
37 brge done
38
39 ; swap RAM[left] and RAM[right]
40 ld r18, r16 ; temp = RAM[left]
41 ld r19, r17 ; RAM[left] = RAM[right]
42 st r16, r19
43 st r17, r18 ; RAM[right] = temp
44
45 ; move pointers
46 inc r16 ; left++
47 dec r17 ; right--
48
49 jmp reverse_loop
50
51done:
52 jmp done
Demonstrates two-pointer technique and array manipulation.