Summing and Displaying an Array
section .data
format: db "%d,",0
section .text
global _sumAndPrintList
extern printf
; Sum and print list,
; C Prototype:
; int _sumAndPrintList(int *list, int length);
_sumAndPrintList:
push ebp ; save ebp
mov ebp,esp ; move stack pointer to ebp
push ebx ; save ebx contents on the stack
push esi ; save esi contents on the stack
mov esi,[ebp+8] ; read the array pointer from the stack into esi
mov ecx,[ebp+12] ; read the array length from the stack into ecx
mov ebx,0 ; ebx will contain the sum, start in zero
printLoop:
mov eax,[esi] ; load a word from the array
add esi,4 ; advance to next word in array
add ebx,eax ; add number to the total sum
push ecx ; save value of ecx
push eax ; push value to print in the stack
push format ; push printf format
call printf ; print number on screen
add esp,8 ; restore stack by popping the 2 arguments
pop ecx ; restore ecx value
loop printLoop ; repeat for all the numbers in array
mov eax,ebx ; put sum in eax to return the value
pop esi ; load old contents of esi from the stack
pop ebx ; load old contents of ebx from the stack
pop ebp ; load old contents of ebp from the stack
ret ; return to calling function
#include
extern int _sumAndPrintList(int *list, int length);
int main()
{
int list[1000]; // list of 1000 numbers
int count,done,sum;
count = 0;
done=0;
while(done==0) // read while the user is not done entering numbers
{
printf("Enter a number (0 to exit): ");
scanf("%d",&list[count]); // read the number and save it in the list
if(list[count]==0) // if the user entered a zero, terminate
{
count--; // discard the 0
done=1;
}
count ++;
if(count>=1000) // if the user entered 1000 numbers, terminate
{
printf("You have entered 1000 numbers!\n");
done=1;
}
}
printf("\nList of numbers:\n");
sum=_sumAndPrintList(list,count);
printf("\nThe sum of the numbers in the list is: %d\n",sum);
printf("\nSo long, and thanks for all the fish!\n\n");
return 0;
}