# Calculate The Area Of Shape And Find Average, Largest And Smallest In MIPS Assembly Language Assignment Solution.

## Instructions

Objective
Write a MIPS assignment program in assembly language to calculate the area of shape and find average, largest and smallest in MIPS assembly language.

## Requirements and Specifications

Write a MIPS assembly language program to calculate the area of each trapezoid in a set of trapezoids. The sides should be read from wordsized aSides , cSides, and heights arrays. The result must be stored into the word-sized tAreas array. Below is the formula to calculate the area of a trapezoid:
tAreas[ n] = (heights[ n] × (aSides [n] +2 cSides[ n]) )
After all the trapezoid areas have been calculated, the program should find the minimum, middle value, maximum, sum, and average for the trapezoid areas array.
The program must display the results to the console window. The output should look something like the following (with the correct answers displayed):
Screenshots of output
Source Code
###########################################################################
# Name:
# NSHE ID:
# Section:
# Assignment: MIPS #1
# Description:
# CS 218, MIPS Assignment #1
# Template
###########################################################################
# data segment
.data
aSides: .word 1, 2, 3, 4, 5, 6, 7, 8, 9, 10
.word 15, 25, 33, 44, 58, 69, 72, 86, 99, 101
.word 107, 121, 137, 141, 157, 167, 177, 181, 191, 199
.word 202, 209, 215, 219, 223, 225, 231, 242, 244, 249
.word 251, 253, 266, 269, 271, 272, 280, 288, 291, 299
.word 369, 374, 377, 379, 382, 384, 386, 388, 392, 393
.word 1469, 2474, 3477, 4479, 5482, 5484, 6486, 7788, 8492, 1493
cSides: .word 1, 2, 3, 4, 5, 6, 7, 8, 9, 10
.word 32, 51, 76, 87, 90, 100, 111, 123, 132, 145
.word 206, 212, 222, 231, 246, 250, 254, 278, 288, 292
.word 332, 351, 376, 387, 390, 400, 411, 423, 432, 445
.word 457, 487, 499, 501, 523, 524, 525, 526, 575, 594
.word 634, 652, 674, 686, 697, 704, 716, 720, 736, 753
.word 1782, 2795, 3807, 3812, 4827, 5847, 6867, 7879, 7888, 1894
heights:
.word 1, 2, 3, 4, 5, 6, 7, 8, 9, 10
.word 102, 113, 122, 139, 144, 151, 161, 178, 186, 197
.word 203, 215, 221, 239, 248, 259, 262, 274, 280, 291
.word 400, 404, 406, 407, 424, 425, 426, 429, 448, 492
.word 501, 513, 524, 536, 540, 556, 575, 587, 590, 596
.word 782, 795, 807, 812, 827, 847, 867, 879, 888, 894
.word 1912, 2925, 3927, 4932, 5447, 5957, 6967, 7979, 7988, 1994
tAreas: .space 280
len: .word 70
taMin: .word 0
taMid: .word 0
taMax: .word 0
taSum: .word 0
taAve: .word 0
LN_CNTR = 8
# -----
hdr: .ascii "MIPS Assignment #1 \n"
.ascii "Program to calculate area of each trapezoid in a series "
.ascii "of trapezoids. \n"
.ascii "Also finds min, mid, max, sum, and average for the "
.asciiz "trapezoid areas. \n\n"
new_ln: .asciiz "\n"
blnks: .asciiz " "
a1_st: .asciiz "\nTrapezoid min = "
a2_st: .asciiz "\nTrapezoid med = "
a3_st: .asciiz "\nTrapezoid max = "
a4_st: .asciiz "\nTrapezoid sum = "
a5_st: .asciiz "\nTrapezoid ave = "
###########################################################
# text/code segment
.text
.globl main
.ent main
main:
# -----
la \$a0, hdr
li \$v0, 4
# --------------------------------------------------------
lw \$t4, 0(\$t4) # load length value
# calculate trapezoid areas
calc_loop:
lw \$t5, 0(\$t0) # load a side
lw \$t6, 0(\$t1) # load c side
add \$t5, \$t5, \$t6 # a + c
srl \$t5, \$t5, 1 # divide by 2 using a shift
lw \$t6, 0(\$t2) # load height
mul \$t5, \$t5, \$t6 # multiply height + (a*c/2)
sw \$t5, 0(\$t3) # save result in areas
addi \$t4, \$t4, -1 # decrement number of remaining areas
bnez \$t4, calc_loop # repeat while not zero
# calculate minimum, maximum and sum
lw \$t1, 0(\$t0) # load first value as minimum
lw \$t2, 0(\$t0) # load first value as maximum
lw \$t4, 0(\$t4) # load length value
minmax_loop:
lw \$t5, 0(\$t0) # load area
bge \$t5, \$t1, ifmax # if area >= min, test max
move \$t1, \$t5 # else, area is new minimum
ifmax:
ble \$t5, \$t2, skip # if area <= max, skip
move \$t2, \$t5 # else, area is new maximum
skip:
addi \$t4, \$t4, -1 # decrement number of remaining areas
bnez \$t4, minmax_loop # repeat while not zero
sw \$t1, 0(\$t0) # save minimum in variable
sw \$t2, 0(\$t0) # save maximum in variable
sw \$t3, 0(\$t0) # save sum in variable
# calculate average
lw \$t4, 0(\$t4) # load length value
div \$t3, \$t3, \$t4 # divide sum by length to get average
sw \$t3, 0(\$t0) # save average in variable
# calculate middle value
srl \$t4, \$t4, 1 # divide length by 2
sll \$t4, \$t4, 2 # multiply value by 4 to get offset in array
lw \$t0, 0(\$t0) # load the middle value
sw \$t0, 0(\$t1) # save middle value
# Display area array
lw \$t1, 0(\$t1) # load length value
li \$t2, 0 # number of values in line, start in 0
display_loop:
li \$v0, 4 # syscall to print a string
syscall # print separating blanks
lw \$a0, 0(\$t0) # load area
li \$v0, 1 # sycall to print a number
syscall # print the number
addi \$t2, \$t2, 1 # increment number of values in the line
blt \$t2, LN_CNTR, display_next # if num < max, go to next
li \$t2, 0 # else, restart counter to zero
li \$v0, 4 # syscall to print a string
syscall # print a newline
display_next:
addi \$t1, \$t1, -1 # decrement number of remaining areas
bnez \$t1, display_loop # repeat while not zero
# --------------------------------------------------------
# Display results.
la \$a0, new_ln # print a newline
li \$v0, 4
syscall
la \$a0, new_ln # print a newline
li \$v0, 4
syscall
# Print min message followed by result.
la \$a0, a1_st
li \$v0, 4
syscall # print "min = "
lw \$a0, taMin
li \$v0, 1
syscall # print min
# -----
# Print middle message followed by result.
la \$a0, a2_st
li \$v0, 4
syscall # print "med = "
lw \$a0, taMid
li \$v0, 1
syscall # print mid
# -----
# Print max message followed by result.
la \$a0, a3_st
li \$v0, 4
syscall # print "max = "
lw \$a0, taMax
li \$v0, 1
syscall # print max
# -----
# Print sum message followed by result.
la \$a0, a4_st
li \$v0, 4
syscall # print "sum = "
lw \$a0, taSum
li \$v0, 1
syscall # print sum
# -----
# Print average message followed by result.
la \$a0, a5_st
li \$v0, 4
syscall # print "ave = "
lw \$a0, taAve
li \$v0, 1
syscall # print average
# -----
# Done, terminate program.
endit:
la \$a0, new_ln # print a newline
li \$v0, 4
syscall
li \$v0, 10
syscall # all done!
.end main