Question: PART A: We will look at C code versus machine code. Write the following code in cygwin using vi and save it as code.c. int

PART A:

We will look at C code versus machine code. Write the following code in cygwin using vi and save it

as code.c.

int main()

{

int i=1;

int j=1;

j=i+10;

j++;

return 0;

}

Compile the code with the following format.

$> gcc S code.c

This will create an assembly file code.s.

Use the cat command to view the contents of code.s.

The assembly code will look something like the following. The annotations will help explain what the

code does.

movl $1, -4(%rbp) //Move first variable onto stack (rbp is base pointer), set

value to 1

movl $1, -8(%rbp) //Move second variable onto stack, set value to 1

movl -4(%rbp), %eax //Move first variable to register %eax

addl $10, %eax //Add 10 to variable in register %eax

movl %eax, -8(%rbp) //Move the value in register %eax to the second variable

addl $1, -8(%rbp) //Add 1 to the second variable

movl $0, %eax //Set the value of register %eax to 0

addq $48, %rsp //Reset stack pointer

popq %rbp //Restore frame pointer

ret

Using the above as an example, write C code to yield the following assembly code. Note that %eax and

%edx are two different registers.

movl $0, -4(%rbp)

movl $0, -8(%rbp)

movl $0, -12(%rbp)

movl -8(%rbp), %eax

movl -4(%rbp), %edx

addl %edx, %eax

movl %eax, -12(%rbp)

movl $0, %eax

addq $48, %rsp

popq %rbp

ret

Write C code below.

Step by Step Solution

There are 3 Steps involved in it

1 Expert Approved Answer
Step: 1 Unlock blur-text-image
Question Has Been Solved by an Expert!

Get step-by-step solutions from verified subject matter experts

Step: 2 Unlock
Step: 3 Unlock

Students Have Also Explored These Related Databases Questions!