Dodasz co do tej pory napisałeś?
EDIT
Cieżko coś zrobić jak nie dałeś kodu.
Z Twojego postu wnioskuję, że masz funkcję mniej więcej taką:
int dodaj(int a, int b, int c, int d, int e);
Nie podałeś też rodziny procesorów, więc zakładam, że x86.
bo wykorzystać można do tego 4 rejestry
Jest więcej rejestrów niż 4. http://pl.wikibooks.org/wiki/Asembler_x86/Architektura#Rejestry_og.C3.B3lnego_przeznaczenia
Ale jeżeli potrzebujesz 5 rejestrów do dodania 5 liczb to zakładam, że robisz coś takiego
mov eax, liczba1
mov ebx, liczba2
...
co nie jest dobrym pomysłem.
Dam dwa przykłady.
Dla funkcji
int dodaj(int a, int b, int c, int d, int e);
.686
.model flat
public _dodaj
.code
_dodaj PROC
push ebp ; zapisanie zawartosci EBP na stosie
mov ebp,esp ; kopiowanie zawartosci ESP do EBP
push ebx ; przechowanie zawartosci rejestru EBX
push ecx
mov eax, 0
mov ebx, ebp
add ebx, 8 ; teraz w ebx jest wskaznik na pierwsza liczbe
mov ecx, 5 ; ile bedzie liczb
dodawanie:
add eax, [ebx]
add ebx, 4
loop dodawanie
pop ecx
pop ebx
pop ebp
ret
_dodaj ENDP
END
dla funkcji
int dodaj(int tab[], int rozmiar);
.686
.model flat
public _dodaj
.code
_dodaj PROC
push ebp ; zapisanie zawartosci EBP na stosie
mov ebp,esp ; kopiowanie zawartosci ESP do EBP
push ebx ; przechowanie zawartosci rejestru EBX
push ecx
mov eax, 0 ; zerujemy wynik
mov ecx, [ebp+12] ; do eax dajemy rozmiar
mov ebx, [ebp+8] ; pobranie wskaznika na tablice
dodawanie:
add eax, [ebx] ; dodajemy kolejna liczbe
add ebx, 4 ; przechodzimy do nastepnej liczby
loop dodawanie
pop ecx
pop ebx
pop ebp
ret
_dodaj ENDP
END
Ten sposób jest chyba lepszy bo nie ogranicza nas co do ilości liczb (w sumie ogranicza przez maksymalną wielkość inta).