Related Questions
- I Want Help With Coding Questions In C++
- Urgent Data Structures Term Paper Help
- Understanding The Basics Of Computer Science Principles Essay Writing Assignment
- Assignment On Principles Of Computer Science
- Which Characteristics Support A Sustainable Mis Infrastructure?
- Project For Ist - Computer Science Assignment Website Design 5 Pages
- Comptia Security+ Exam
- Networking Using Packet Tracer
- I Need Help With A Wireshark Assignment
- Can You Do Both My Comptia A+ For Me
- What Is An Algorithm In Computer Science?
- Can You Log Into My College And Do My Ucertify Labs For Each Week And Take My Final Exam?
- Which One Is True For Sprint Planning? The Work To Be Performed In The Sprint Is Planned
- The Cyberapolis Water Company Has Been Taken Over By The Carbon Spector Terrorist Organization
- Hacking Assignment- Gain Access To Admin Credentials
Popular Services
- Coursework writing help
- Term paper writing help
- Writing Help
- Paper Writing Help
- Research paper help
- Thesis Help
- Dissertation Help
- Case study writing service
- Capstone Project Writing Help
- Lab report Writing
- Take my online class
- Take my online exam
- Do my test for me
- Do my homework for me
- Do my math homework for me
- Online Assignment Help
- Do my assignment for me
- Essay Writing Help
- Write my college essay
- Write my essay for me
Post your project now for free and watch professional homework help answers experts outbid each other in just a few minutes.
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
Ask a question for free and get answers to get Computer Architecture assignment help with a similar task to this question.