## Definise se funkcija sum koja racuna sumu elemenata niza.
## Ova funkcija ce se pozivati iz main funkcije napisane u C-u.

.intel_syntax noprefix

# Pocetak sekcije sa kodom. 
.text

# Definicija globalnih simbola
.global sum

############################
## int sum(int *a, int n) ##
## 
## rdi -- int *a
## esi -- int n
############################
sum:

# Prolog funkcije
    enter 0,0

    # Inicijalizuju se suma i brojac na nulu. Registar 
    # rax sluzi za povratnu vrednost, dok registar
    # rcx sluzi kao brojac u petljama.
    xor     rax, rax
    xor     rcx, rcx

    # U glavnoj petlji se krecemo kroz ceo niz
    # i redom elemente niza dodajemo na sumu.
    # Pristup elementima niza vrsimo pomocu
    # indeksnog adresiranja.
main_loop:
    cmp     ecx, esi
    je      done
    add     eax, [rdi + 4*rcx]
    inc     ecx
    jmp     main_loop

done:

    # Epilog funkcije
    leave
    ret
