Order Now  +1 678 648 4277 

Load and store instructions and control structures in ARM assembly assignment help

The assignment deals with implementing four ARM assembly programs that show how to use control structures and load/store instructions. The programs are created as explained by our ARM assembly assignment helpers:- the first program demonstrates the use of conditional execution using an if-then-else control structure to determine the largest of three numbers given in some registers. The second program deals with implementing a more iterative control structure to compute the Fibonacci number series up to a determined term. The third program deals with using load and store instructions to implement the search of the largest of three numbers now saved in memory. The last program deals with changing the Fibonacci program to store the first 25 Fibonacci numbers on the data memory.

Implementing Load Instructions for Computing Fibonacci Numbers 

.text .global main main: MOV R1, #34 /* set values on the registers 1 to 3 */ MOV R2, #54 MOV R3, #21 MOV R0, #0 /* register to hold answer */ MOV R0, R1 /* assume R1 is the largest value */ CMP R0, R2 /* see if R0 is bigger than R2 */ BGE ifR3 /* if so, now compare with R3 */ MOV R0, R2 /* else, R2 is the biggest, save in R0 */ ifR3: CMP R0, R3 /* see if R0 is bigger than R3 */ BGE end /* if so, R0 is the biggest, end program */ MOV R0, R3 /* else, R3 is the biggest, save in R0 */ end: BX LR /* return and exit program */ .text .global main main: MOV R0, #23 /* counter of terms to generate only 25 terms (23 + the 2 initial ones)*/ MOV R1, #1 /* first fibonacci number */ MOV R2, #1 /* second fibonacci number */ fibloop: ADD R3, R1, R2 /* calculate new Fibonacci number adding the 2 previous ones */ MOV R1, R2 /* move the second number down for the next iteration */ MOV R2, R3 /* set sum as a new second number to sum for next iteration */ SUBS R0, R0, #1 /* decrement term counter */ BNE fibloop /* repeat while the counter is not zero */ MOV R0, R2 /* save last fibonacci number in R0 for returning it */ end: BX LR /* return and exit program */ .text .global main main: /* load values on the registers 1 to 3 */ LDR R1, =N1 LDR R1, [R1] /* load N1 value into R1 */ LDR R2, =N2 LDR R2, [R2] /* load N2 value into R2 */ LDR R3, =N3 LDR R3, [R3] /* load N3 value into R3 */ MOV R0, #0 /* register to hold answer */ MOV R0, R1 /* assume R1 is the largest value */ CMP R0, R2 /* see if R0 is bigger than R2 */ BGE ifR3 /* if so, now compare with R3 */ MOV R0, R2 /* else, R2 is the biggest, save in R0 */ ifR3: CMP R0, R3 /* see if R0 is bigger than R3 */ BGE endif /* if so, R0 is the biggest, end comparisons */ MOV R0, R3 /* else, R3 is the biggest, save in R0 */ endif: LDR R4, =LARGEST STR R0, [R4] /* save largest value in the variable */ end: BX LR /* return and exit program */ .data .balign 4 /* declare the 3 numbers to use */ N1: .word 34 N2: .word 54 N3: .word 21 /* place to save the largest value */ LARGEST: .skip 4 .text .global main main: MOV R0, #23 /* counter of terms to generate only 25 terms (23 + the 2 initial ones)*/ LDR R4, =fib_numbers /* get the address of the fibobacci number array into R4 */ MOV R1, #1 /* first fibonacci number */ STR R1, [R4], #4 /* save number in array, increment pointer */ MOV R2, #1 /* second fibonacci number */ STR R2, [R4], #4 /* save number in array, increment pointer */ fibloop: ADD R3, R1, R2 /* calculate new Fibonacci number adding the 2 previous ones */ MOV R1, R2 /* move the second number down for the next iteration */ MOV R2, R3 /* set sum as a new second number to sum for next iteration */ STR R2, [R4], #4 /* save number in array, increment pointer */ SUBS R0, R0, #1 /* decrement term counter */ BNE fibloop /* repeat while the counter is not zero */ MOV R0, R2 /* save last fibonacci number in R0 for returning it */ end: BX LR /* return and exit program */ .data .balign 4 /* place to save the first 25 Fibonacci numbers (25*4), initialize to zero */ fib_numbers: .skip 100, 0