# Programming loops and subroutines using MIPS assembly homework help

July 10, 2024
Rehana Magnus
Assembly Language
Rehana Magnus, PhD in Computer Science from the esteemed Acadia Institute of Technology, Canada. With 6 years of experience, specializes in assembly language programming. Proficient in low-level coding, optimizing performance, and enhancing system functionality.
Key Topics
• Conditional and Unconditional Branching in MIPS Assembly
Tip of the day
News

The homework deals with implementing two different programs using MIPS assembly. The first part processes two arrays and saves the result in a third one. The program uses conditional and unconditional branches to implement the solution. The second part deals with reading five numbers from the user, saving them on the stack and printing them in the reverse order. The sum of the elements in the array is also calculated. Our MIPS assembly homework help doers have provided the solution to this problem below.

## Conditional and Unconditional Branching in MIPS Assembly

In the fascinating realm of MIPS Assembly, mastering Conditional and Unconditional Branching is crucial for crafting efficient and robust code. Embrace the power of choice with conditional branches, where program flow dynamically adapts based on conditions. Unleash the potential of unconditional branches, enabling seamless jumps to specified addresses. Embrace these fundamental concepts to optimize program execution, enhance decision-making processes, and unlock endless possibilities. Fear not the complexities, for with practice comes mastery. Delve into the art of Conditional and Unconditional Branching, and pave the way for innovative and elegant solutions in the captivating world of MIPS Assembly.

Source Code

```# Assignment 4 # File: prog4.asm # Date: April 2, 2020 # Register usage: # \$s0: memory base address # \$t0: temporary register for calculations and comparisons # \$t1: base address of array1 # \$t2: base address of array2 # \$t3: base address of array3 # \$t4: index of arrays (i) # \$t5: offset in bytes of element at current index # \$t6: used to load array1[i] # \$t7: used to load array2[i] # \$t8: used to hold value to save in array3[i] .data array1: .word 303,340,342,390,141,449,189,360,325,338 array2: .word 466,22, 29, 161,465,196,416,123,325,273 array3: .space 40 .text .globl main main: lui \$s0, 0x1001 # address of array1 addu \$t1, \$zero, \$s0 # base address for array1 addiu \$t2, \$s0, 40 # base address for array2 addiu \$t3, \$s0, 80 # base address for array3 addi \$t4, \$zero, 0 # initialize index to zero j compare # start loop loop: sll \$t5, \$t4, 2 # multiply index by 4 addu \$t0, \$t1, \$t5 # get address of array1[i] lw \$t6, 0(\$t0) # load array1[i] addu \$t0, \$t2, \$t5 # get address of array2[i] lw \$t7, 0(\$t0) # load array2[i] slt \$t0, \$t7, \$t6 # if array1[i] <= array2[i] bne \$t0, \$zero, else add \$t8, \$t6, \$t7 # array3[i] = array1[i] + array2[i]; j endif else: # else sub \$t8, \$t6, \$t7 # array3[i] = array1[i] - array2[i]; endif: addu \$t0, \$t3, \$t5 # get address of array3[i] sw \$t8, 0(\$t0) # save result in array3[i] addi \$t4, \$t4, 1 # increment index compare: slti \$t0, \$t4, 10 # compare with 10 bne \$t0, \$zero, loop # repeat while index < 10 # Assignment 5 # File: prog5.asm # Date: April 2, 2020 # Register usage: # \$s0: loop counter for loop1 and loop2 # \$s1: accumulator for adding values # \$a0: used to pass values to syscalls and push function # \$v0: used to pass/get values in syscalls and to get value from pop function # \$sp: used to access stack in push and pop # \$ra: return address .data prompt: .asciiz "Enter five integers. Press enter after each one.\n" message1: .asciiz "The numbers entered were: " message2: .asciiz "\nThe sum of the numbers = " .text .globl main main: # define values for first loop control addiu \$s0, \$zero, 5 # to loop 5 times # print the user prompt la \$a0, prompt # load string address addiu \$v0, \$zero, 4 # syscall number to print string syscall # print the string loop1: # read value from user input addiu \$v0, \$zero, 5 # syscall number to read integer syscall # read the number # push value onto stack addu \$a0, \$zero, \$v0 # pass value to push jal push # loop control instructions addi \$s0, \$s0, -1 # decrement number of times to loop bne \$s0, \$zero, loop1 # repeat while not zero # reset loop control for output addiu \$s0, \$zero, 5 # to loop 5 times addiu \$s1, \$zero, 0 # initialize accumulator to zero # print the output message la \$a0, message1 # load string address addiu \$v0, \$zero, 4 # syscall number to print string syscall # print the string loop2: # pop value from stack jal pop # add value to accumulator add \$s1, \$s1, \$v0 # print value to console addu \$a0, \$zero, \$v0 # pass value to print addiu \$v0, \$zero, 1 # syscall number to print integer syscall # print the number # print space addiu \$a0, \$zero, 32 # space ascii value to print addiu \$v0, \$zero, 11 # syscall number to print character syscall # print the character # loop control instructions addi \$s0, \$s0, -1 # decrement number of times to loop bne \$s0, \$zero, loop2 # repeat while not zero # print sum of values la \$a0, message2 # load string address addiu \$v0, \$zero, 4 # syscall number to print string syscall # print the string addu \$a0, \$zero, \$s1 # pass value to print addiu \$v0, \$zero, 1 # syscall number to print integer syscall # print the number exit: addi \$v0, \$zero, 10 # syscall number to exit program syscall # exit program # subroutine to push on stack push: addi \$sp, \$sp, -4 # allocate space in stack sw \$a0, 0(\$sp) # save value in stack jr \$ra # return # subroutine to pop from stack pop: lw \$v0, 0(\$sp) # load value from stack addi \$sp, \$sp, 4 # remove allocated space from stack jr \$ra # return ```

## Related Samples

At ProgrammingHomeworkHelp.com, we offer specialized assistance with Assembly Language assignments, featuring a range of expertly crafted sample solutions. Our samples are designed to provide clear, practical insights into Assembly Language programming, helping students understand complex concepts and improve their skills. Whether you need help with basic syntax or advanced programming techniques, our samples and support are tailored to meet your academic needs. Explore our comprehensive resources and get the guidance you need to excel in your Assembly Language coursework.