Intel 32 Bit Assembly Language Assignment

Need help with similar Computer Architecture questions?

Ask A Question

Question: Intel 32 Bit Assembly Language Assignment

Asked
Modified
Viewed 52
I need you to do this assignment for me. Make sure the assembly code is using grcc 32-bit (intel), please comment on the assembly code as in the instructions, and please do the first bounus portion. The instructions are in the word document (please put your answers in there) and the code is provided at the bottom of the word file.
More Instructions
Programming Assignment 2: The purpose of this project is to gain a greater understanding of the Intel 32-bit instruction set and understand how a compiler translates C code into assembly language. By compiling the program in unoptimized mode you will hopefully see a fairly clear translation. When running in optimization mode, you will see how well compilers can optimize your code. To compile an unoptimized version use: gcc -Wa,-adhln -g -masm=intel -m32 "Project 2.c" > "Project 2-g.asm" This will write the unoptimized inter-mixed source and assembly code Project 2-g.asm. To compile an optimized version use: gcc -Wa,-adhln -O -masm=intel -m32 "Project 2.c" > "Project 2-o.asm" This will write the optimized inter-mixed source and assembly code Project 2-o.asm. The -Wa,-adhln option causes gcc to generate intermixed source and assembly code. The -masm=intel option causes gcc to generate assembly code in intel format. The -m32 generates 32-bit code. The -g option generates unoptimized code while -O generates optimized code. The generated code includes quite a few directives that can be ignored. Most of the directives begin with a period (.). There are also a few call instructions to procedures that you may not know what they mean that can be ignored. For example: call __x86.get_pc_thunk.bx add ebx, OFFSET FLAT:_GLOBAL_OFFSET_TABLE_ The following questions should be answered using the unoptimized code. 1. Describe the stack at line 24 (return (sum);). The bottom of the stack is the first row below. The top of the stack will be the last item. The first few items are provided. You will probably need to add some additional rows to the table below. Description Value First argument to main argv Second argument to main argc Return address of main Caller’s return address C runtime value of bp Caller’s bp register Local variable i in main [bp-12] 1 2. In detail explain the code generated for line 82 (k = function1(i, j);). For this and all further questions in which you are asked to explain the code generated in detail, I expect you to copy the generated code and add a comment for each line. For example: 006e C745FC00 mov DWORD PTR -4[ebp], 0 ; initialize i You can also refer to Week9-CAssembly-g.asm for examples of what you should submit. 3. In detail explain the code generated for function2 (line 28 through 39). The following questions should be answered using the optimized code. 4. In detail explain the code generated for function1. 5. How are function calls optimized? The following questions should be answered using by comparing the unoptimized code and the optimized code. 6. Compare the code generated by function4 in the unoptimized and optimized versions. Explain the optimizations. Bonus – 10 points In detail explain the code generated for function3. This a hard. Try your best. Why is the compiler doing this? You need to explain the purpose of each line of the generated assembly code. Bonus – 10 points The file strlen.asm contains the Microsoft Visual Studio source code for the strlen() function. You need to explain the purpose of each line of the assembly code. Grading Criteria By Project Items: 1. Stack contents not defined well enough (-5 -> -10 points). 2. Call functon1 description (-5 -> -10 points). 3. Code description for function2 not complete enough (-5 -> -10 points). 4. Optimized function1 description incomplete (-5 -> -10 points). 5. Optimized function call description incomplete (-5 -> -10 points). 6. Function4 optimized description incomplete (-5 -> -10 points). Code: /* Project 2 */ /* GCC */ /* gcc -Wa,-adhln -g -masm=intel -m32 "Project 2.c" > "Project 2-g.asm" */ /* gcc -Wa,-adhln -O -masm=intel -m32 "Project 2.c" > "Project 2-o.asm" */ #include <stdio.h> #define NOINLINE __attribute__ ((noinline)) static NOINLINE int function1(int x, int y) { int i; int sum; int values[10]; sum = 0; for (i = 0; i < 10; i++) { values[i] = 10 * i + x * y; sum += values[i]; } return (sum); } static int NOINLINE function2(int *values, int valuesLen) { int i; int sum; sum = 0; for (i = 0; i < valuesLen; i++) { sum += values[i]; } return (sum); } static NOINLINE int function3(int x) { int y; y = x / 10; return (y); } static NOINLINE int function4(int a, int b, int c, int d) { int r; if (a > b) r = a; else if (a > c) r = 2 * a; else if (a > d) r = 3 * a; else r = -1; return (r); } int main(int argc, char **argv) { int i; int j; int k; int values[10]; i = 1; j = 2; k = function1(i, j); printf("function1: i = %d, j = %d, k = %d\n", i, j, k); for (i = 0; i < 10; i++) { values[i] = i; } k = function2(values, 10); printf("function2: k = %d\n", k); k = function3(100); printf("function3: k = %d\n", k); k = function4(1, 2, 3, 4); printf("function4: k = %d\n", k); return (0); }
Answers 0

No answers posted

Post your Answer - free or at a fee

Login to your tutor account to post an answer

Posting a free answer earns you +20 points.

Login

Ask a question for free and get answers to get Computer Architecture assignment help with a similar task to this question.