Find MaximumΒΆ

Finds the maximum value in an array.

 1; Find Maximum - Find max value and index in [12, 45, 7, 89, 23, 56, 34, 78]
 2; Output: R16 = 89 (max value), R17 = 3 (index)
 3
 4start:
 5    ; Initialize array at RAM[0x60..0x67]
 6    ldi r20, 0x60
 7    ldi r21, 12
 8    st r20, r21
 9    inc r20
10    
11    ldi r21, 45
12    st r20, r21
13    inc r20
14    
15    ldi r21, 7
16    st r20, r21
17    inc r20
18    
19    ldi r21, 89       ; Maximum value
20    st r20, r21
21    inc r20
22    
23    ldi r21, 23
24    st r20, r21
25    inc r20
26    
27    ldi r21, 56
28    st r20, r21
29    inc r20
30    
31    ldi r21, 34
32    st r20, r21
33    inc r20
34    
35    ldi r21, 78
36    st r20, r21
37    
38    ; Find maximum
39    ldi r16, 0        ; max = 0
40    ldi r17, 0        ; max_index = 0
41    ldi r18, 0x60     ; address
42    ldi r19, 8        ; count
43    ldi r20, 0        ; current_index
44
45find_loop:
46    ld r21, r18       ; Load array[i]
47    
48    cp r16, r21       ; Compare max with current
49    brge no_update    ; Skip if max >= current
50    mov r16, r21      ; max = current
51    mov r17, r20      ; max_index = i
52
53no_update:
54    inc r18           ; address++
55    inc r20           ; i++
56    dec r19           ; count--
57    
58    cpi r19, 0
59    brne find_loop
60
61done:
62    jmp done

Demonstrates comparison operations and conditional logic.