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