Question: Problem #1. Consider the following assembly language program. /* assume Mem[40 + R[$6] == 5 */ add $5, $0, $0 lw $1,40($6) loop: addi $1,

Problem #1. Consider the following assembly language program. /* assume Mem[40 + R[$6] == 5 */ add $5, $0, $0 lw $1,40($6) loop: addi $1, $1,-1 add $5, $5, $1 add $6, $5, $0 sw $1, 20($6) bne $1, $0, nop nop a) Assume that the code is executed on a non-pipelined CPU, with each instruction taking 5 clock cycles. What is the total execution time in clock cycles? b) Assume that the code is executed on our 5 stage pipeline with forwarding. What is the total execution time in clock cycles? Hints*1. You must stall 1 clock cycle if the operand fetched from the lw (load word) instruction is to be used by the next instruction. 2. When counting instructions assume the instruction immediately following a conditional branch is always executed. c) What speedup did the pipeline achieve ? Problem #1. Consider the following assembly language program. /* assume Mem[40 + R[$6] == 5 */ add $5, $0, $0 lw $1,40($6) loop: addi $1, $1,-1 add $5, $5, $1 add $6, $5, $0 sw $1, 20($6) bne $1, $0, nop nop a) Assume that the code is executed on a non-pipelined CPU, with each instruction taking 5 clock cycles. What is the total execution time in clock cycles? b) Assume that the code is executed on our 5 stage pipeline with forwarding. What is the total execution time in clock cycles? Hints*1. You must stall 1 clock cycle if the operand fetched from the lw (load word) instruction is to be used by the next instruction. 2. When counting instructions assume the instruction immediately following a conditional branch is always executed. c) What speedup did the pipeline achieve