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.
Assembly Language
Assembly Language
Assembly Language
Assembly Language
Assembly Language
Assembly Language
Assembly Language
Assembly Language
Assembly Language
Assembly Language
Assembly Language
Assembly Language
Assembly Language
Assembly Language
Assembly Language
Assembly Language
Assembly Language
Assembly Language
Assembly Language
Assembly Language