Academic Integrity: tutoring, explanations, and feedback — we don’t complete graded work or submit on a student’s behalf.

Using the following assembly code: .LC0 .string \"ans %d\ \" main: .LFB0: pushq

ID: 3885756 • Letter: U

Question

Using the following assembly code:

.LC0 .string "ans %d " main:

.LFB0:

pushq %rbp

movq %rsp, %rbp

subq $16, %rsp

movabsq $53162464113523643, %rax

movq %rax, -8(%rbp)

movl $0, -12(%rbp) jmp .L2

.L3:

movq -8(%rbp), %rax

movl %eax, %edx andl $1, %edx

movl -12(%rbp), %eax

addl %edx, %eax

movl %eax, -12(%rbp)

sarq -8(%rbp)

.L2:

cmpq $0, -8(%rbp)

jg .L3

movl -12(%rbp), %eax

movl %eax, %esi

movl $.LC0, %edi

movl $0, %eax

call printf

leave

ret

This code came from the following skeleton C file, and optimized with O0, so gcc -O0 -S was the exact command to compile the file. Step 1 might be to ignore the skeleton file and create a C file from the assembly code, and then rewrite the code to fit the skeleton file.

int main() {

long int val=_________;

int result=_________;

for(;val>_________;val=_________)

result += ___________;

printf("ans %d ",result);

}

Explanation / Answer

Optimized C code:-

#include<stdio.h>

int main() {

long int val=53162464113523643;

int result=0;

for(;val>0;val=val/2)

result += val;

printf("ans %d ",result);

}