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

Implement the following C function in Assembly. ***ARM Language*** int theFuncti

ID: 3849623 • Letter: I

Question

Implement the following C function in Assembly. ***ARM Language***

int theFunction( int *Numbers, int *DestNumbers, int count)
{
int i;
int flag;
int sum;

flag = 1;
sum = 0;

while (flag)
      {
      i = 0;
      while (i<count)
                       {
                          sum = sum + Numbers[i];
                          DestNumbers[i] = sum ;

if (sum > 1000)
                              { DestNumbers[i] = sum – DestNumbers[i-1];

                    sum = 0;

      flag = 0;
     }

i++;

                       }

      }
return(sum);

}

Explanation / Answer

Given C function in Assembly ARM Language ------>

theFunction(int*, int*, int):
        str     fp, [sp, #-4]!
        add     fp, sp, #0
        sub     sp, sp, #36
        str     r0, [fp, #-24]
        str     r1, [fp, #-28]
        str     r2, [fp, #-32]
        mov     r3, #1
        str     r3, [fp, #-12]
        mov     r3, #0
        str     r3, [fp, #-16]
.L6:
        ldr     r3, [fp, #-12]
        cmp     r3, #0
        beq     .L2
        mov     r3, #0
        str     r3, [fp, #-8]
.L5:
        ldr     r2, [fp, #-8]
        ldr     r3, [fp, #-32]
        cmp     r2, r3
        bge     .L6
        ldr     r3, [fp, #-8]
        mov     r3, r3, asl #2
        ldr     r2, [fp, #-24]
        add     r3, r2, r3
        ldr     r3, [r3]
        ldr     r2, [fp, #-16]
        add     r3, r2, r3
        str     r3, [fp, #-16]
        ldr     r3, [fp, #-8]
        mov     r3, r3, asl #2
        ldr     r2, [fp, #-28]
        add     r3, r2, r3
        ldr     r2, [fp, #-16]
        str     r2, [r3]
        ldr     r3, [fp, #-16]
        cmp     r3, #1000
        ble     .L4
        ldr     r3, [fp, #-8]
        mov     r3, r3, asl #2
        ldr     r2, [fp, #-28]
        add     r3, r2, r3
        ldr     r2, [fp, #-8]
        sub     r2, r2, #-1073741823
        mov     r2, r2, asl #2
        ldr     r1, [fp, #-28]
        add     r2, r1, r2
        ldr     r2, [r2]
        ldr     r1, [fp, #-16]
        rsb     r2, r2, r1
        str     r2, [r3]
        mov     r3, #0
        str     r3, [fp, #-16]
        mov     r3, #0
        str     r3, [fp, #-12]
.L4:
        ldr     r3, [fp, #-8]
        add     r3, r3, #1
        str     r3, [fp, #-8]
        b       .L5
.L2:
        ldr     r3, [fp, #-16]
        mov     r0, r3
        sub     sp, fp, #0
        ldr     fp, [sp], #4
        bx      lr