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.asm" To compile an optimized version use: gcc -Wa,-adhln -O -masm=intel -m32 "Project 2.c" > "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. 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 In detail explain the code generated for function2 (line 28 through 39). The following questions should be answered using the optimized code. In detail explain the code generated for function1. How are function calls optimized? The following questions should be answered using by comparing the unoptimized code and the optimized code. Compare the code generated by function4 in the unoptimized and optimized versions. Explain the optimizations.       C code. Need to optimized and unpotimized versions that show the assembly language.  /* 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 #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);      } 28. static int NOINLINE function2(int *values, int valuesLen) {     int i;     int sum;     sum = 0;     for (i = 0; i < valuesLen; i++) {         sum += values[i];     } 39.    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; 82.     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); }   I have labeled some lines of code

Computer Networking: A Top-Down Approach (7th Edition)
7th Edition
ISBN:9780133594140
Author:James Kurose, Keith Ross
Publisher:James Kurose, Keith Ross
Chapter1: Computer Networks And The Internet
Section: Chapter Questions
Problem R1RQ: What is the difference between a host and an end system? List several different types of end...
icon
Related questions
Question

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.asm"

To compile an optimized version use:

gcc -Wa,-adhln -O -masm=intel -m32 "Project 2.c" > "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. 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

  1. In detail explain the code generated for function2 (line 28 through 39).

The following questions should be answered using the optimized code.

  1. In detail explain the code generated for function1.
  2. How are function calls optimized?

The following questions should be answered using by comparing the unoptimized code and the optimized code.

  1. Compare the code generated by function4 in the unoptimized and optimized versions. Explain the optimizations.

 

 

 

C code. Need to optimized and unpotimized versions that show the assembly language. 

/* 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);
    
}

28. static int NOINLINE function2(int *values, int valuesLen)
{

    int i;
    int sum;

    sum = 0;
    for (i = 0; i < valuesLen; i++) {
        sum += values[i];
    }

39.    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;
82.     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);
}

 

I have labeled some lines of code

Expert Solution
trending now

Trending now

This is a popular solution!

steps

Step by step

Solved in 2 steps

Blurred answer
Follow-up Questions
Read through expert solutions to related follow-up questions below.
Follow-up Question

In detail explain the code generated for function2 (line 28 through 39).

Solution
Bartleby Expert
SEE SOLUTION
Recommended textbooks for you
Computer Networking: A Top-Down Approach (7th Edi…
Computer Networking: A Top-Down Approach (7th Edi…
Computer Engineering
ISBN:
9780133594140
Author:
James Kurose, Keith Ross
Publisher:
PEARSON
Computer Organization and Design MIPS Edition, Fi…
Computer Organization and Design MIPS Edition, Fi…
Computer Engineering
ISBN:
9780124077263
Author:
David A. Patterson, John L. Hennessy
Publisher:
Elsevier Science
Network+ Guide to Networks (MindTap Course List)
Network+ Guide to Networks (MindTap Course List)
Computer Engineering
ISBN:
9781337569330
Author:
Jill West, Tamara Dean, Jean Andrews
Publisher:
Cengage Learning
Concepts of Database Management
Concepts of Database Management
Computer Engineering
ISBN:
9781337093422
Author:
Joy L. Starks, Philip J. Pratt, Mary Z. Last
Publisher:
Cengage Learning
Prelude to Programming
Prelude to Programming
Computer Engineering
ISBN:
9780133750423
Author:
VENIT, Stewart
Publisher:
Pearson Education
Sc Business Data Communications and Networking, T…
Sc Business Data Communications and Networking, T…
Computer Engineering
ISBN:
9781119368830
Author:
FITZGERALD
Publisher:
WILEY