In this lab, you are expected to compare the source code and assembly code for t
ID: 3600380 • Letter: I
Question
In this lab, you are expected to compare the source code and assembly code for the following C code. (You can get the assembly code with usually the –s flag). Can you see any optimizations that can be done on the assembly code?
int a=1, b=2, c=3;
int proc1 (int a, int b, int c) {
if (a > 0)
return b c;
else
return b + c;
}
int main() {
int w, x, y;
w = proc1 (a, b, c);
switch (w) {
case 0: x = 3; break;
case 1: x = 4; break;
case 2: x = 7; break;
default: x = 9; break;
}
y = w + x;
return 0;
}
Report: Please include your (wellcommented) assembly code and your explanation of what this program does and how the assembly code can be optimized. Include your test results with several screenshots.
Explanation / Answer
MIPS Assembly Language Code:
L0:
push rbp
mov rbp, rsp
mov DWORD PTR [rbp-4], edi
mov DWORD PTR [rbp-8], esi
mov DWORD PTR [rbp-12], edx
cmp DWORD PTR [rbp-4], 0
jle .L2
mov eax, DWORD PTR [rbp-8]
sub eax, DWORD PTR [rbp-12]
jmp .L3
.L2:
mov edx, DWORD PTR [rbp-8]
mov eax, DWORD PTR [rbp-12]
add eax, edx
.L3:
pop rbp
ret
main:
push rbp
mov rbp, rsp
sub rsp, 32
mov DWORD PTR [rbp-8], 1
mov DWORD PTR [rbp-12], 2
mov DWORD PTR [rbp-16], 3
mov edx, DWORD PTR [rbp-16]
mov ecx, DWORD PTR [rbp-12]
mov eax, DWORD PTR [rbp-8]
mov esi, ecx
mov edi, eax
call L0
mov DWORD PTR [rbp-20], eax
mov eax, DWORD PTR [rbp-20]
cmp eax, 1
je .L6
cmp eax, 2
je .L7
test eax, eax
jne .L11
mov DWORD PTR [rbp-4], 3
jmp .L9
.L6:
mov DWORD PTR [rbp-4], 4
jmp .L9
.L7:
mov DWORD PTR [rbp-4], 7
jmp .L9
.L11:
mov DWORD PTR [rbp-4], 9
nop
.L9:
mov edx, DWORD PTR [rbp-20]
mov eax, DWORD PTR [rbp-4]
add eax, edx
mov DWORD PTR [rbp-24], eax
mov eax, 0
leave
ret
Related Questions
drjack9650@gmail.com
Navigate
Integrity-first tutoring: explanations and feedback only — we do not complete graded work. Learn more.