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

onsider the following LEGv8 loop: LOOP: SUBIS X1, X1, #0 B.LE DONE SUBI X1, X1,

ID: 3890903 • Letter: O

Question

onsider the following LEGv8 loop:

LOOP: SUBIS X1, X1, #0

B.LE DONE

SUBI X1, X1, #1

ADDI X0, X0, #2

B LOOP

DONE:

a. For the loop above, write the equivalent C code. Assume that the registers X0 and X1 are integers acc and i respectively.

b. For the loop written in LEGv8 assembly above, assume that register X1 is initialized to the value N. How many LEGv8 instructions are executed?

c. For the loop written in LEGv8 assembly above, replace the instruction "B.LE DONE" with "B.MI DONE" write the equivalent C code.

d. What is the purpose of the SUBIS instruction in the the assembly code above?

e. Show how you can reduce the number of instructions by combining the SUBIS and SUBI instructions. (Hint: Add one instruction outside the loop)

Explanation / Answer

a)

for ( i=N; i>0; i-- ){

          acc += 2;

}

b) N times (self explanatory)

c) B.MI branch on minus, thus condition check in for loop is updated as:

for ( i=N; i>=0; i-- ){

          acc += 2;

}

d) SUBIS is for condition checks. It compares the value of i with 0 and if its i<=0 then loop exits otherwise statements inside loop are exectuted.