Academic Integrity: tutoring, explanations, and feedback — we don’t complete graded work or submit on a student’s behalf.

Implement a MIPS assembly language program that defines main, readArray and remo

ID: 3876416 • Letter: I

Question

Implement a MIPS assembly language program that defines main, readArray and removeEvenOdd procedures.
The readArray takes an array of integers as its parameter, reads in integers from a user to fill the array and also print each value as long as it is with the number of elements specified by the parameter "howMany" and "length".
The removeEvenOdd procedure takes parameters of an array of integers, its length, and even value, an asks a user how many integers to read in and calls the readyArray procedure. Then it should go through the array to see if each number is even (divisible by 2) if the parameter even is 0. In that case, such even integer in the array is changed to 0. If the parameter even is 1, then it changes every odd integer in the array to 0. Then it prints out the updated content of the array.
The main procedure asks a user to specify whether to remove even or odd numbers by asking them to enter an integer. Then it calls the removeEvenOdd procedure. It repeats these two steps twice.

Please see the following C program to understand how it should work.
If your program causes an infinite loop, press Control and 'C' keys at the same time to stop it.   
Name your source code file assignment6.s.

The following shows how it looks like in a C program:

The following is a sample output (user input is in bold):


Enter zero to remove even numbers or non-zero to remove odd numbers
0
Specify how many numbers should be stored in the array (at most 8):
8
Enter an integer:
1
Enter an integer:
-12
Enter an integer:
53
Enter an integer:
-4
Enter an integer:
5
Enter an integer:
32
Enter an integer:
1
Enter an integer:
7
The array content:
1
-12
53
-4
5
32
1
7
After removing even integers
1
1
53
1
5
1
1
7
Enter zero to remove even numbers or non-zero to remove odd numbers
1
Specify how many numbers should be stored in the array (at most 8):
5
Enter an integer:
1
Enter an integer:
-5
Enter an integer:
-2
Enter an integer:
3
Enter an integer:
2
The array content:
1
-5
-2
3
2
After removing odd integers
0
0
-2
0
2

--------------------------------------------------

What to turn in:

programs should be well commented.

Each procedure needs to have a header using the following format:

############################################################################
# Procedure readArray
# Description: -----
# parameters: $a0 = address of array
# return value: $v0 = length
# registers to be used: $s3 and $s4 will be used.
############################################################################

Explanation / Answer

Code:

.data # Data segment

max_len: .word 8

len: .space 4

array: .space 32

even: .space 4

prompt1: .asciiz "Enter zero to remove even numbers or non-zero to remove odd numbers "

prompt2: .asciiz "Specify how many numbers should be stored in the array (at most 8): "

prompt3: .asciiz "Enter an integer: "

prompt4: .asciiz "The array content: "

prompt5: .asciiz "After removing even integers "

prompt6: .asciiz "After removing odd integers "

nl: .asciiz " "

# Main segment

.globl main

.text

main:

# prompting user for input

la $a0, prompt1

li $v0, 4

syscall

# reading Integer from user

li $v0, 5

syscall

sw $v0, even

jal removeEvenOdd

# prompting user for input

la $a0, prompt1

li $v0, 4

syscall

# reading Integer from user

li $v0, 5

syscall

sw $v0, even

jal removeEvenOdd

j exit

############################################################################

# Procedure removeEvenOdd

# Description: The removeEvenOdd sets each even integer in the array to 1, if the parameter "even" is 0,

# and sets each odd integer in the array to 0, if the parameter "even" is not 0.

# parameters: $a0 = address of array

# return value: $v0 = length

# registers to be used: $s3 and $s4 will be used.

############################################################################

removeEvenOdd:

move $t0, $ra

# prompting user for input

la $a0, prompt2

li $v0, 4

syscall

# reading Integer from user

li $v0, 5

syscall

sw $v0, len

# take array input

jal readArray

# remove even or odd based on user's choice

lw $s3, max_len

lw $s4, len

lw $s5, even

li $t1, 0

loop3:

mul $t2, $t1, 4

lw $s0, array($t2)

andi $s1, $s0, 1

seq $s1, $s1, 0

seq $t5, $s5, 0

and $t5, $t5, $s1

beq $t5, 1, update_even

andi $s1, $s0, 1

seq $s1, $s1, 1

seq $t5, $s5, 1

and $t5, $t5, $s1

beq $t5, 1, update_odd

b skip_update

update_even:

li $t6, 1

sw $t6, array($t2)

b skip_update

update_odd:

li $t6, 0

sw $t6, array($t2)

skip_update:

add $t1, $t1, 1

sne $t3, $t1, $s3

sne $t4, $t1, $s4

and $t3, $t3, $t4

beq $t3, 1, loop3

# print even odd prompts

beqz $s5, print_even

la $a0, prompt6

li $v0, 4

syscall

b print_done

print_even:

la $a0, prompt5

li $v0, 4

syscall

# print final output

print_done:

li $t1, 0

loop4:

mul $t2, $t1, 4

lw $a0, array($t2)

li $v0, 1

syscall

add $t1, $t1, 1

la $a0, nl

li $v0, 4

syscall

bne $t1, $s4, loop4

move $ra, $t0

jr $ra

############################################################################

# Procedure readArray

# Description: The readArray procedure reads integers from user input and prints each element in the array

# parameters: $a0 = address of array

# return value: $v0 = length

# registers to be used: $s3 and $s4 will be used.

############################################################################

readArray:

lw $s3, max_len

lw $s4, len

li $t1, 0

# read elements into array

loop1:

la $a0, prompt3

li $v0, 4

syscall

li $v0, 5

syscall

mul $t2, $t1, 4

sw $v0, array($t2)

add $t1, $t1, 1

sne $t3, $t1, $s3

sne $t4, $t1, $s4

and $t3, $t3, $t4

beq $t3, 1, loop1

# print original array contents

la $a0, prompt4

li $v0, 4

syscall

li $t1, 0

loop2:

mul $t2, $t1, 4

lw $a0, array($t2)

li $v0, 1

syscall

add $t1, $t1, 1

la $a0, nl

li $v0, 4

syscall

bne $t1, $s4, loop2

jr $ra

exit:

# exit the program

li $v0, 10

syscall

Output:

Enter zero to remove even numbers or non-zero to remove odd numbers
0
Specify how many numbers should be stored in the array (at most 8):
8
Enter an integer:
1
Enter an integer:
-12
Enter an integer:
53
Enter an integer:
-4
Enter an integer:
5
Enter an integer:
32
Enter an integer:
1
Enter an integer:
7
The array content:
1
-12
53
-4
5
32
1
7
After removing even integers
1
1
53
1
5
1
1
7
Enter zero to remove even numbers or non-zero to remove odd numbers
1
Specify how many numbers should be stored in the array (at most 8):
5
Enter an integer:
1
Enter an integer:
-5
Enter an integer:
-2
Enter an integer:
3
Enter an integer:
2
The array content:
1
-5
-2
3
2
After removing odd integers
0
0
-2
0
2

-- program is finished running --

Hire Me For All Your Tutoring Needs
Integrity-first tutoring: clear explanations, guidance, and feedback.
Drop an Email at
drjack9650@gmail.com
Chat Now And Get Quote