Question

In: Computer Science

Write the LEGv8 assembly program for following c program. Assume array1, array2 and array3 are stored...

Write the LEGv8 assembly program for following c program. Assume array1, array2 and array3 are stored in memory with base addresses at 1000, 2000 and 3000 respectively.

int absoluteDifference(int x, int y) {
int r;
if (x > y)
r = x - y;
else
r = y - x;

return r;
}

int main() {
for (int i=0; i < 10; i++) {
int a = array1[i];
int b = array2[i];
int c = absoluteDifference(a, b);
array3[i] = c;
}
}

Solutions

Expert Solution

absoluteDifference:

        str     fp, [sp, #-4]!

        add     fp, sp, #0

        sub     sp, sp, #20

        str     r0, [fp, #-16]

        str     r1, [fp, #-20]

        ldr     r2, [fp, #-16]

        ldr     r3, [fp, #-20]

        cmp     r2, r3

        ble     .L2

        ldr     r2, [fp, #-16]

        ldr     r3, [fp, #-20]

        sub     r3, r2, r3

        str     r3, [fp, #-8]

        b       .L3

.L2:

        ldr     r2, [fp, #-20]

        ldr     r3, [fp, #-16]

        sub     r3, r2, r3

        str     r3, [fp, #-8]

.L3:

        ldr     r3, [fp, #-8]

        mov     r0, r3

        add     sp, fp, #0

        ldr     fp, [sp], #4

        bx      lr

.LC0:

        .word   1

        .word   2

        .word   3

        .word   4

        .word   5

        .word   6

        .word   7

        .word   8

        .word   9

        .word   0

main:

        push    {fp, lr}

        add     fp, sp, #4

        sub     sp, sp, #136

        ldr     r3, .L9

        sub     ip, fp, #60

        mov     lr, r3

        ldmia   lr!, {r0, r1, r2, r3}

        stmia   ip!, {r0, r1, r2, r3}

        ldmia   lr!, {r0, r1, r2, r3}

        stmia   ip!, {r0, r1, r2, r3}

        ldm     lr, {r0, r1}

        stm     ip, {r0, r1}

        ldr     r3, .L9

        sub     ip, fp, #100

        mov     lr, r3

        ldmia   lr!, {r0, r1, r2, r3}

        stmia   ip!, {r0, r1, r2, r3}

        ldmia   lr!, {r0, r1, r2, r3}

        stmia   ip!, {r0, r1, r2, r3}

        ldm     lr, {r0, r1}

        stm     ip, {r0, r1}

        ldr     r3, .L9

        sub     ip, fp, #140

        mov     lr, r3

        ldmia   lr!, {r0, r1, r2, r3}

        stmia   ip!, {r0, r1, r2, r3}

        ldmia   lr!, {r0, r1, r2, r3}

        stmia   ip!, {r0, r1, r2, r3}

        ldm     lr, {r0, r1}

        stm     ip, {r0, r1}

        mov     r3, #0

        str     r3, [fp, #-8]

        b       .L6

.L7:

        ldr     r3, [fp, #-8]

        lsl     r3, r3, #2

        sub     r2, fp, #4

        add     r3, r2, r3

        ldr     r3, [r3, #-56]

        str     r3, [fp, #-12]

        ldr     r3, [fp, #-8]

        lsl     r3, r3, #2

        sub     r2, fp, #4

        add     r3, r2, r3

        ldr     r3, [r3, #-96]

        str     r3, [fp, #-16]

        ldr     r1, [fp, #-16]

        ldr     r0, [fp, #-12]

        bl      absoluteDifference

        str     r0, [fp, #-20]

        ldr     r3, [fp, #-8]

        lsl     r3, r3, #2

        sub     r2, fp, #4

        add     r3, r2, r3

        ldr     r2, [fp, #-20]

        str     r2, [r3, #-136]

        ldr     r3, [fp, #-8]

        add     r3, r3, #1

        str     r3, [fp, #-8]

.L6:

        ldr     r3, [fp, #-8]

        cmp     r3, #9

        ble     .L7

        mov     r3, #0

        mov     r0, r3

        sub     sp, fp, #4

        pop     {fp, pc}

.L9:

        .word   .LC0


Related Solutions

Write the LEGv8 assembly program for following c program. Assume array1, array2 and array3 are stored...
Write the LEGv8 assembly program for following c program. Assume array1, array2 and array3 are stored in memory with base addresses at 1000, 2000 and 3000 respectively. int absoluteDifference(int x, int y) { int r; if (x > y) r = x - y; else r = y - x; return r; } int main() { for (int i=0; i < 10; i++) { int a = array1[i]; int b = array2[i]; int c = absoluteDifference(a, b); array3[i] = c;...
Write the LEGv8 assembly program for following c program. Assume array1, array2 and array3 are stored...
Write the LEGv8 assembly program for following c program. Assume array1, array2 and array3 are stored in memory with base addresses at 1000, 2000 and 3000 respectively. int absoluteDifference(int x, int y) { int r; if (x > y) r = x - y; else r = y - x; return r; } int main() { for (int i=0; i < 10; i++) { int a = array1[i]; int b = array2[i]; int c = absoluteDifference(a, b); array3[i] = c;...
5. Two arrays “Array1” and “Array2” are given with 25 words each. Design an ARM assembly...
5. Two arrays “Array1” and “Array2” are given with 25 words each. Design an ARM assembly code to compare sum of the numbers sotred in the arrays. If sum of Array1 is greater, save a “1” in R10, otherwise, save “0’ in R10.    
Two arrays “Array1” and “Array2” are given with 25 words each. Design an ARM assembly code...
Two arrays “Array1” and “Array2” are given with 25 words each. Design an ARM assembly code to compare sum of the numbers sotred in the arrays. If sum of Array1 is greater, save a “1” in R10, otherwise, save “0’ in R10.
Write a RARS assembly language program to solve the following: For a set of integers stored...
Write a RARS assembly language program to solve the following: For a set of integers stored in an array, calculate the sum of the positive numbers and the sum of the negative numbers, storing the results into memory. In the data segment of the program, define an array consisting of 25 integers (words) that are a mix of positive and negative values. You can select any values you wish but try to create a balance of positive and negative numbers....
Compile the following C code to MIPS assembly. a. Assume that i and j are stored...
Compile the following C code to MIPS assembly. a. Assume that i and j are stored in register $s1 and $s2, respectively. i = i – 2 + j; b. Assume base address of Array B and the variable i are stored in registers $s3 and $s1, respectively. B[1] = (B[0] x 4) - I; Explain each step in detail! my professor has the following answer: 1) addi $t0, $s1, -2 add $s1, $$t0, $s2 2) lw $t0, 0 ($s3)...
Write in Java: Write a method called: public static String[] noIdenticalCombine(String[] array1, String[] array2) { //...
Write in Java: Write a method called: public static String[] noIdenticalCombine(String[] array1, String[] array2) { // instructions: returns an array that contains all the Strings in array1 and array2 but without repetition. order does not matter, but it will return array1's elements and then array2's element that are not in array1. Assume there are no duplicates are in array1 and array2. Could use count which is how many str there are in array2, where !contains(array1, str). May an array of...
Write an assembly language program that corresponds to the following C program ****Please give correct answer...
Write an assembly language program that corresponds to the following C program ****Please give correct answer using Pep/9 machine**** int num1; int num2; ;int main () { scanf("%d", &num1); num2 = -num1; printf("num1 = %d\n", num1); printf("num2 = %d\n", num2); return 0; }
Represent following LEGv8 machine code into assembly instruction. 0x784302CD
Represent following LEGv8 machine code into assembly instruction. 0x784302CD
Write a program in java processing. Write a program that does the following: · Assume the...
Write a program in java processing. Write a program that does the following: · Assume the canvas size of 500X500. · The program asks the user to enter a 3 digit number. · The program then checks the value of the first and last digit of the number. · If the first and last digits are even, it makes the background green and displays the three digit number at the mouse pointer. · If the two digits are odd, it...
ADVERTISEMENT
ADVERTISEMENT
ADVERTISEMENT