#### (Solved): Task 1: You Are Given A Program In MIPS Assembly Language That Computes The Area Of A Rectangle Give ...

You are given a program in MIPS assembly language that computes the area of a rectangle given the width and the height (ex1.asm). The width and height are read from the standard input after prompting the user, and then the program computes the area and prints it on the standard output. Here's an example scenario:

Enter width (integer):

2

Enter height (integer):

4

Rectangle's area is 8

Modify the program so that it also calculates and prints the perimeter (i.e., sum of all sides) of the rectangle. Thus, after modification, the example scenario would become:

Enter width (integer):

2

Enter height (integer):

4

Rectangle's area is 8

Its perimeter is 12

Copy the file?ex1.asm?to?ex2.asm. Modify the program in?ex2.asm?to make it work on multiple inputs. In particular, it should repeatedly ask for width and height values, and print the corresponding area and perimeter, until the user enters the value?0?for width. At that point, the program should terminate. Here's an execution scenario:

Enter width (integer):

2

Enter height (integer):

4

Rectangle's area is 8

Its perimeter is 12

Enter width (integer):

5

Enter height (integer):

6

Rectangle's area is 30

Its perimeter is 22

Enter width (integer):

0

Essentially, this exercise involves introducing a loop around the main code of Task 1. As long as width is not equal to 0, the program repeats by looping back to the top of the loop. If width is 0, the program breaks out of the loop. The key instructions for forming such loops are:?beq,?bne?and?j. You may need one or more of these, depending on how you construct your loop.

1. Save all your programs as ex1.asm, ex2.asm and comment your code properly.

1. Test your program with your own test cases and save the screenshots.

1. Upload all the files, ex1.asm, ex2.asm and at least two screenshots showing the output to the Blackboard.

This is the code:

ex1.asm

```# Assembly starter file for Exercise 1

.data 0x0
width:        .word 0
height:       .word 0
area:         .word 0
perimeter:    .word 0

widthPrompt:  .asciiz "Enter width (integer):\n"
heightPrompt: .asciiz "Enter height (integer):\n"
areaIs:       .asciiz "Rectangle's area is "
perimeterIs:  .asciiz "Its perimeter is "
newline:      .asciiz "\n"

.text 0x3000

main:
# Print the prompt for width
addi  \$v0, \$0, 4                      # system call 4 is for printing a string
la    \$a0, widthPrompt                # address of widthPrompt is in \$a0
syscall                               # print the string

addi  \$v0, \$0, 5                      # system call 5 is for reading an integer
syscall                               # integer value read is in \$v0
add   \$8, \$0, \$v0                     # copy the width into \$8

# Print the prompt for height
addi  \$v0, \$0, 4                      # system call 4 is for printing a string
la    \$a0, heightPrompt               # address of heightPrompt is in \$a0
syscall                               # print the string

addi  \$v0, \$0, 5                      # system call 5 is for reading an integer
syscall                               # integer value read is in \$v0
add   \$9, \$0, \$v0                     # copy the height into \$9

# Calculate area
mult  \$8, \$9                          # multiply width * height
mflo  \$10                             # bring the product into \$10 (assume hi not needed)

# Print "Rectangle's area is "
addi  \$v0, \$0, 4                      # system call 4 is for printing a string
la    \$a0, areaIs                     # address of areaIs string is in \$a0
syscall                               # print the string

# Print the calculated area (in \$10)
addi  \$v0, \$0, 1                      # system call 1 is for printing an integer
add   \$a0, \$0, \$10                    # bring the area value from \$10 into \$a0
syscall                               # print the integer

# Print a newline
addi  \$v0, \$0, 4                      # system call 4 is for printing a string
la    \$a0, newline                    # address of areaIs string is in \$a0
syscall                               # print the string

# Exit from the program
exit:
ori \$v0, \$0, 10                       # system call code 10 for exit
syscall                               # exit the program```