×
Samples Blogs Make Payment About Us Reviews 4.9/5 Order Now

Calling x86 assembly functions from C homework help

July 10, 2024
Dr. Jessie T. Jenkins
Dr. Jessie
🇨🇭 Switzerland
C
Dr. Jessie T. Jenkins completed her Ph.D. in Computer Science at ETH Zurich in Zurich, Switzerland. With 6 years of experience and a remarkable track record of over 400 completed C# assignments, she is a highly proficient C# Homework expert. Dr. Jenkins excels in delivering clear, well-structured solutions and is committed to helping students achieve their academic goals in C# programming.
Key Topics
  • Summing and Displaying an Array
Tip of the day
Familiarize yourself with OCaml's pattern matching; it simplifies handling recursive data structures like lists and trees, making your code concise and easier to debug.
News
In 2024, Girls Who Code introduced a Data Science + AI track in their free summer programs for high school students, fostering skills in cybersecurity and creative coding​

The homework deals with implementing an assembly function to sum and display an array using x86 assembly. The function is used by the main function which is implemented in C. The function uses the x86 calling convention and uses the standard C library function printf to display the array. The function uses the stack to read the arguments and save the registers used. Below is how to call x86 assembly functions demonstrated by our C programming homework help experts.

Summing and Displaying an Array

Calling x86 assembly functions from C assignment help

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; }

Related Samples

Discover our free C assignment samples to enhance your programming skills. Each sample is crafted to demonstrate essential concepts and effective coding techniques in C.